我需要一个Cron作业来执行一个Scraper到一个网站并发送带有这些信息的电子邮件,我做了一个控制器来做到这一点,但是当我设置命令来运行该文件时
php app/controllers/ScraperController.php
我收到此错误
PHP致命错误:找不到类'BaseController' 第2行的/var/www/U-Scraper/app/controllers/ScraperController.php
问题是,当我设置一个到该控制器的路径时,它可以工作
答案 0 :(得分:10)
控制器本身不运行,它们作为Laravel的一个组件。如果您正在直接加载控制器,那么Laravel不会被加载,就PHP而言BaseController
以及Laravel的Controller
类不存在。通常,您的Web服务器会加载public/index.php
来加载Laravel等等。如果这令人困惑,您可能想了解如何使用Composer进行自动加载:http://net.tutsplus.com/tutorials/php/easy-package-management-with-composer/
你应该做的是write an Artisan command做你需要的事情并使用cron调用该命令。这个问题提供了有关如何完成此任务的详细信息:Cron Job in Laravel
答案 1 :(得分:3)
我建议您创建新的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');
有关工匠命令的更多信息here
有可能,您可以将整个控制器方法放入此命令而无需触摸代码;)
答案 2 :(得分:0)
这是我使用Laravel 4和Artisan Command功能设置CRON作业的方式。
首先,使用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';
完成后,您需要通过打开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