laravel 在自定义文件中使用 artisan

laravel use artisan in custom file

我正在直接管理,在 directadmin cronjobs 中你可以只 运行 个文件。 然后我尝试在 public 中创建一个类似 cron.php 的文件,并像这样使用我的命令:

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

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

Fatal error: Uncaught Error: Class 'Artisan' not found in

如何在我的自定义文件中使用 Or Import Artisan class?

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

要使上述代码正常工作,您必须使用该应用程序创建 Artisan 门面使用的基础实例,即

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

也就是说,你基本上是在重新发明轮子,因为 Laravel 为这个 out-of-the-box https://laravel.com/docs/5.2/scheduling.

提供了一个更优雅的解决方案

因此,与其为您的应用程序为一个 cron 命令创建另一个入口点,不如使用任务计划。这样做的一些额外优势是:

  1. 您可以在应用程序中定义所有的 cron 作业,这样您就可以更轻松地查看实际设置了哪些作业。
  2. 如果您最终将您的应用程序移动到不同的服务器,那么您不必担心再次设置所有的 cron 作业。
  3. 如果其他开发人员最终开始开发该应用程序,他们也会更好地了解正在发生的事情。

如果您不喜欢使用 Laravel 的任务调度的想法,并且您更愿意在您的 crontab 中定义所有这些,那么我建议为您的 cron 作业制作一个控制器,然后使用laravel 内置路由来为您处理请求。

希望对您有所帮助!