laravel在自定义文件中使用工匠

时间:2017-01-14 13:04:36

标签: laravel laravel-5 laravel-5.2 crontab

我正在开发直接管理员,在directadmin cronjobs中你可以运行文件。 然后我尝试在公共场合创建一个像cron.php这样的文件并使用我的cammands:

<?php
require __DIR__.'/../bootstrap/autoload.php';
$app = require_once __DIR__.'/../bootstrap/app.php';
\Artisan::call('newsletter:send');

当我的cron运行时我有这个错误:

  

致命错误:未捕获错误:

中找不到“Artisan”类

如何在我的自定义文件中使用或导入Artisan类?

1 个答案:

答案 0 :(得分:1)

简单地创建应用程序的实例并不意味着您的外观将会正常工作,因为它们不在应用程序的范围内。

要使上述代码正常工作,您必须使用该应用程序来制作Artisan外观使用的基础实例,即

$app->make('Illuminate\Contracts\Console\Kernel')->call('newsletter:send')

话虽这么说,你基本上正在重新发明这个,因为Laravel为这个开箱即用的https://laravel.com/docs/5.2/scheduling提供了一个更优雅的解决方案。

因此,您可以改为使用任务计划,而不是为一个cron命令创建应用程序的另一个入口点。这方面的一些额外优势是:

  1. 您可以在应用内定义所有cron作业,这样您就可以更轻松地查看实际设置的作业。
  2. 如果您最终将应用程序移动到其他服务器,那么您不必担心再次设置所有cron作业。
  3. 如果其他开发人员最终使用该应用程序,他们将更好地了解正在发生的事情。
  4. 如果您不喜欢使用Laravel的任务调度的想法,并且您希望在crontab中定义所有这些,那么我建议为您的cron作业创建一个控制器,然后使用laravel的内置路由来处理请求对你而言。

    希望这有帮助!