Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Консольное приложение из сайта на Symfony2

Anna | 31.05.2014 | нет комментариев

Наворотили моделей, конфигурацию, и еще кучу завязанной на фреймворк бизнес-логики на вашем сайте, а потом внезапно оказалось, что необходимо добавить несколько скриптов, которые бы запускались по крону для решения тяжелых задач? Давайте испробуем сделать так Дабы каждый данный функционал, в т.ч. контроллеры, дозволено было запускать из консольного скрипта. Данный метод представляет из себя соглашение между прагматичностью и гипертрофированным чувством очаровательного, присущным архитектуре Symfony в целом.

1. Создаем контроллер

Дабы писать код нашего скрипта так же, как и в остальном веб-приложении, нам необходим контроллер.

php app/console generate:controller --no-interaction --controller=CronBundle:CronController

На том пока с контроллером и завершим.

2. Создаем маршруты

Сотворим маршрут для экшена в котором будет находиться логика. Откроем routes.yml и добавим:

  cron_action:
    pattern: /cron/cron_action
    defaults: { _controller: CronBundle:Cron:cron }
3. Правим контроллер

Код контроллера должен быть приблизительно таким:

<?php
namespace AppCronBundleController;
use SymfonyComponentHttpFoundationResponse;

class CronController extends Controller {

    public function __construct() {

        /* 
           проверяем что контроллер вызывается из скрипта а не через http-запрос,
           взамен 'cron_script.php' подставьте имя файла скрипта тот, что будет запускаться
           через cron 
        */
        if ($_SERVER["SCRIPT_NAME"] != "cron_script.php") {
            print("disallowed");
            exit();
        }
    }

    public function cronAction() {

       /* тут логика вашего скрипта */

       // Дабы не было ошибки
       return new Response('');
    }
}
4. Создаем скрипт для запуска

В корневой директории плана, там где находится src/, сделайте папку с наименованием scripts, а в ней файл с именем cron_script.php. Его содержимое должно быть таким:

<?php

use SymfonyComponentClassLoaderApcClassLoader;
use SymfonyComponentHttpFoundationRequest;

$loader = require_once __DIR__.'/../app/bootstrap.php.cache';
require_once __DIR__.'/../app/AppKernel.php';
$kernel = new AppKernel('prod', false);
$kernel->loadClassCache();

// взамен '/cron/cron_action' должно быть URL маршрута тот, что вы предпочли для экшена с логикой,
// именно URL, а не имя маршрута
$request = Request::create('/cron/cron_action');
$response = $kernel->handle($request);
$response->send();

$kernel->terminate($request, $response);

Данный файл и необходимо будет подсунуть крону.Сейчас дозволено применять всю мощь Symfony и во вспомогательных скриптах.

Источник: programmingmaster.ru

Оставить комментарий
БАЗА ЗНАНИЙ
СЛУЧАЙНАЯ СТАТЬЯ
СЛУЧАЙНЫЙ БЛОГ
СЛУЧАЙНЫЙ МОД
СЛУЧАЙНЫЙ СКИН
НОВЫЕ МОДЫ
НОВЫЕ СКИНЫ
НАКОПЛЕННЫЙ ОПЫТ
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB