5

我需要一个 Cron 作业来执行 Scraper 到网站并发送包含信息的电子邮件,我制作了一个控制器来执行此操作,但是当我设置命令来运行该文件时

php 应用程序/控制器/ScraperController.php 

我收到这个错误

PHP 致命错误:在第 2 行的 /var/www/U-Scraper/app/controllers/ScraperController.php 中找不到类“BaseController”

问题是,当我设置到该控制器的路由时它可以工作

4

3 回答 3

10

控制器不是自己运行的,它们作为 Laravel 的一个组件工作。如果您直接加载控制器,则不会加载 Laravel,并且就 PHP 而言BaseController,以及 Laravel 的Controller类不存在。通常你的网络服务器会加载public/index.php加载 Laravel 等等。如果这令人困惑,您可能想了解使用 Composer 进行自动加载的工作原理: http: //net.tutsplus.com/tutorials/php/easy-package-management-with-composer/

您应该做的是编写一个 Artisan 命令来执行您需要的操作,并使用 cron 调用该命令。这个问题详细说明了如何做到这一点:Cron Job in Laravel

于 2013-10-03T04:10:08.983 回答
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');

更多关于 Artisan 命令的信息在这里

有机会,您可以将整个控制器方法放入此命令中,而无需接触代码;)

于 2013-10-03T11:23:32.120 回答
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:

Artisan::add(new FooCommand);

然后在命令行中使用 Artisan,您可以使用以下命令运行您的任务:

php artisan command:my_foo_command

这只会调用该命令一次 - 要使其定期运行,请将以下内容添加到您的 CRONTAB:

1 * * * * /usr/bin/php /path/to/the/artisan command:my_foo_command
于 2014-10-15T08:40:42.340 回答