原帖
大家晚上好。我有一个laravel设置,我试图有一个cronjob执行一个php函数到laravel项目目录内的文件。
当我尝试这样做时,我得到类和名称空间错误:
<?php
require_once('../laravel/app/Http/Controllers/NotificationsController.php');
,然后调用processQueuedNotifications()
函数。
这当然会给我错误,在laravel目录中调用我的函数的正确方法是什么?我需要调用这个函数,因为这个函数有所有正确的命名空间和扩展控制器,需要正确执行这个函数。
更新1:
感谢@michael,我已经知道了Laravel中一个叫做commands
的组件。
所以我运行这段代码:php artisan make:console processQueuedNotifications
它在console目录下创建了一些文件。
正在探索下一步该做什么。
在检查了
kernel.php
文件使用的Event
s类之后,我注意到这个类为我提供了一个易于使用的接口来动态地创建cron作业。我这样想对吗?我注意到每分钟都没有运行cron作业的功能,编辑
Events
类文件而不被未来的make:console
命令或laravel更新覆盖是否安全?我在
kernel.php
文件中看到了这段代码:$schedule->command('inspire') ->hourly();
所以这是你想让我添加函数的地方吗?因为我注意到激励函数是自动创建的,让我理解发生了什么?
所以我写
$schedule->command('processQueuedNotifications')
->everyMinute();
//Providing it's safe to edit the Event's class or figure out a clean way of doing so without my code being deleted in the future on Laravel updates.
一个非常方便的方法是使用laravels控制台组件。您可以通过发出
来创建一个新命令php artisan make:console
然后在app/console
目录中找到它。确保在创建后在Kernel.php文件中启用该命令。
只需在命令内部通过cron调用您的类或任何您想要运行的内容。控制台命令本身可以通过cli调用,就像运行laravels的php artisan ...
命令一样。您可以在为您创建的文件中设置它。例如,您可以在任何地方使用
/usr/bin/php /path/to/file/artisan my:command
如果需要,可以设置选项和参数。
文档如下:http://laravel.com/docs/5.0/commands/http://symfony.com/doc/current/components/console/introduction.html
有一个数组在kernel.php
你需要注册你的类(包括命名空间)。之后,它可以通过cli调用。首先,看看你可以初始化的参数和选项,以防你需要在控制器类上发出不同的请求。(您为控制台命令选择的文件名是一个参数。您可以将它们设置为您自己的命令的必选或可选。)
在您的文件中,您可以通过简单地在适当的方法中使用这些值创建一个数组来创建它们:
[$name, $mode, $description, $defaultValue]
看一下jeffery的文档或laracast,它们非常好。
要只从控制台命令调用类,只需在文件的上述部分中命名命令并像 那样调用控制器即可。(new namespace'controller)->method();
你可以在你的代码中做什么,在你的更新,2个选择:
- 使用总线facade从代码中直接调度命令
首先使用use Illuminate'Support'Facades'Bus;
然后在你的代码
Bus::dispatchNow(new YourCommandClass);
(不要忘记导入命令类)
- 使用相同的总线facade为队列进程分派它:
(仍以相同方式导入)
Bus::dispatch(new YourCommandClass);
(注意,在这种情况下,您需要在cron作业中运行以下命令:
php artisan queue:listen
它可以处理几个选项,如——tries=X,其中是尝试的次数等
一般来说,您可以通过输入php artisan my命令获得更多信息:command -h