Мне нужно задание Cron для выполнения Скрепера на веб-сайте и отправки электронной почты с информацией, я сделал контроллер для этого, но когда я настроил команду для запуска этого файла
php app / controllers / ScraperController.php
Я получаю эту ошибку
PHP Неустранимая ошибка: Class 'BaseController' не найден в /var/www/U-Scraper/app/controllers/ScraperController.php в строке 2
Дело в том, что он работает, когда я настраиваю маршрут к этому контроллеру
Контроллеры не работают сами по себе, они работают как компонент Laravel. Если вы загружаете свой контроллер напрямую, Laravel не загружается, и насколько PHP связан с BaseController
, а также с классом Controller
Laravel, не существует. Обычно ваш веб-сервер загружает public/index.php
который загружает Laravel и так далее. Если это вас сбивает с толку, вы можете узнать, как работает автозагрузка с Composer: http://net.tutsplus.com/tutorials/php/easy-package-management-with-composer/
Что вам нужно сделать, это написать команду Artisan, которая сделает все, что вам нужно, и вызвать эту команду с помощью cron. Этот вопрос дает подробную информацию о том, как это сделать: Cron Job в Laravel
Я предлагаю вам создать новую команду Artisan вместо контроллера.
Затем задайте задачу CRON для запуска вашей команды, например:
1 * * * * /usr/bin/php /path/to/the/artisan nameofthecustomcommand
Если вы не можете запустить / установить задачу таким образом, но вы можете установить URL-адрес для выполнения
http://mydomain.com/cron.php // cron.php // I am aware I do use exec() exec('php artisan nameofthecustomcommand');
Подробнее о командах Artisan здесь
Есть шанс, вы можете поместить весь контроллер в эту команду, не касаясь кода;)
Так я установил задания CRON, используя Laravel 4 и функцию Artisan Command.
Во-первых, создайте новую команду с помощью Artisan. В командной строке введите:
php artisan command:make FooCommand
В папке app/commands
вас появится новый файл FooCommand.php
.
Откройте этот файл и напишите свой код в функции fire()
. Это будет выполняться каждый раз, когда запускается ваша команда. Существуют и другие функции, которые позволяют вам захватывать аргументы и параметры из командной строки.
В вашем файле команды есть также переменные $name
и $description
которые необходимо заполнить. Дайте вашей задаче приятное имя и описание, например:
/** * The console command name. * * @var string */ protected $name = 'command:my_foo_command'; /** * The console command description. * * @var string */ protected $description = 'A description of what the command does';
Как только вы закончите, вам необходимо зарегистрировать его в Artisan, открыв app/start/artisan.php
и добавив:
Artisan::add(new FooCommand);
Затем, используя Artisan в командной строке, вы можете запустить свою задачу, используя:
php artisan command:my_foo_command
Это вызовет команду только один раз – чтобы запустить ее на регулярной основе, добавьте следующее в CRONTAB:
1 * * * * /usr/bin/php /path/to/the/artisan command:my_foo_command