2016-11-22 16 views
1

コマンドの新しいクラスをApp \ Console \ Commandsフォルダに作成しました。laravel:スケジューラが私のコントローラを見つけることができません

<?php 

namespace App\Console\Commands; 

use Illuminate\Console\Command; 

class Schedular extends Command 
{ 
    /** 
    * The name and signature of the console command. 
    * 
    * @var string 
    */ 
    protected $signature = 'log:Schedular'; 

    /** 
    * The console command description. 
    * 
    * @var string 
    */ 
    protected $description = 'schadular'; 

    /** 
    * Create a new command instance. 
    * 
    * @return void 
    */ 
    public function __construct() 
    { 
     parent::__construct(); 
    } 

    /** 
    * Execute the console command. 
    * 
    * @return mixed 
    */ 
    public function handle() 
    { 
     return $schedule->call('[email protected]')->everyMinute(); 
    } 
} 

とkern.phpに私は次のコード

<?php 

namespace App\Console; 

use Illuminate\Console\Scheduling\Schedule; 
use Illuminate\Foundation\Console\Kernel as ConsoleKernel; 
use \App\Controllers; 

class Kernel extends ConsoleKernel 
{ 
    /** 
    * The Artisan commands provided by your application. 
    * 
    * @var array 
    */ 
    protected $commands = [ 
     'App\Console\Commands\Schedular' 
    ]; 

    /** 
    * Define the application's command schedule. 
    * 
    * @param \Illuminate\Console\Scheduling\Schedule $schedule 
    * @return void 
    */ 
    protected function schedule(Schedule $schedule) 
    { 

     return $schedule->call('')->everyMinute(); 
    } 

    /** 
    * Register the Closure based commands for the application. 
    * 
    * @return void 
    */ 
    protected function commands() 
    { 
     require base_path('routes/console.php'); 
    } 
} 

を書いた私はここで、コントローラクラスを作成することが出来るのですか?または私は何を書くべきですか?

return $schedule->call('')->everyMinute(); 

コントローラと同じ機能を持つ新しいクラスを作成する必要がありますか?

+1

コントローラはWebリクエスト用ですので、コンソールコマンドクラスを作成する必要があります –

+0

ここに「保護された機能」がありますか? – Frondor

答えて

2

コントローラは、アプリケーションの場合はトランスポート層と考える必要があります。すべての実際の機能ロジックは、あなたのドメインクラスに入る必要があります。

コントローラの機能を消費する方法(サービスクラスなど)でリファクタリングしてみてください。次に同じサービスクラスを使用するコマンドクラスを作成し、機能をトリガーする別の方法を提供します。

このようにして、サービスクラスにカプセル化された機能が実現します。コントローラクラスとコマンドクラスの両方は、ただの転送手段としてそのクラスを消費しています。 HTTP要求とCLIコマンド。

リファクタリングを実行すると、1分ごとにコマンドが実行されるようにスケジュールできます。