2017-01-14 9 views
0

私はdirect adminとdirectadmin cronjobsで作業しています。ファイルを実行するだけです。 その後、私は公共の場でcron.phpのようなファイルを作成し、このように私のcammandsを使用しよう:laravelカスタムファイルの職人を使用

<?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

がどのように使用することができますか私のカスタムファイルでArtisanクラスをインポートしますか?

+0

laravelには、cronを処理するためのコンソールクラスがあります。https://laravel.com/docs/5.3/artisan –

+0

@KhanShahrukh質問を読んでいますか?どのように私は職人のクラスをカスタムファイルで使用することができますか? – user7418553

+0

パブリックディレクトリにいる場合、あなたのパスは '__DIR __。 '/ ../bootstrap/autoload.php'と' __DIR __。 '/ ../bootstrap/app.php''? –

答えて

1

単にアプリケーションのインスタンスを作成しても、あなたのファサードはアプリのスコープ内にないので機能しません。あなたの仕事にあなたの上記のコードを取得するには

が言われていること、すなわち

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

Artisanファサードを使用するものの基礎となるインスタンスを作成するためにアプリを使用しなければならないでしょう、あなたは基本的にこの1と車輪の再発明されていますLaravelには、このアウトオブボックスのためのはるかに洗練されたソリューションが付属しています。https://laravel.com/docs/5.2/scheduling

したがって、1つのcronコマンド用に別のエントリポイントを作成するのではなく、タスクスケジューリングを使用することができます。

  1. あなたのアプリケーション内にすべてのcronジョブを定義して、実際にどのジョブが実際により簡単に設定されているかを確認することができます。
  2. アプリを別のサーバーに移動すると、すべてのcronジョブの設定をもう一度心配する必要はありません。
  3. 他の開発者がこのアプリケーションの開発を終えると、何が起こっているのかをよりよく理解することができます。

あなたはLaravelのタスクのスケジューリングを使用しての考えを好きではないし、あなたのcrontabファイルでそれらのすべてを定義することを好むなら、私はあなたのcronジョブのためのコントローラを作成し、その後へのルーティングに建てlaravelのを使用することをお勧めしあなたの要求を処理してください。

希望すると便利です。

関連する問題