- 投稿日:2019-03-10T19:11:13+09:00
LaravelのCommandを使う
ちょっと更新が滞ってしまったけど、過去ブログのQiitaへの移転シリーズ第5弾、今回はこの記事なのですが、当時使っていたのがLaravel5.2で、今は5.7(もう5.8リリースしたんだっけ)と大分時が経ってしまったのでちょくちょく修正していこうかと。
Webシステムと言っても、ブラウザから操作するだけでなく毎日(or毎週or毎月)、自動的に何かやってほしいことがあると思います。 例えば、毎年4月1日になったら学年を更新するとか。
そんな時に役に立つLaravelのコマンド(とcrontab)を紹介します。
やり方は、以下の流れになります。1. artisanでコマンドを作成する
例えば、コマンドのクラス名をUpdateGradeという名前で作ることを考えます。
php artisan make:command UpdateGrade注:5.2までは下記のコマンドになります。
php artisan make:console UpdateGradeこれによってapp/Console/Commands/UpdateGrade.phpが出来上がります。さらにオプションで"--command=コマンド名"とやると、実際に打つコマンド名を変えることができます。
例えば、実行するコマンド名をupdate_gradeとすると、php artisan update_gradeでコマンドが実行できるようになります。
2. コマンドのプログラムを実装する
1.で出来たapp/Console/Commands/UpdateGrade.phpのファイルにソースコードを実装します。実際の処理の他にコマンドラインオプションもこちらで実装できます。詳細はこちらを参考にしてください。
3. カーネルに先ほどのコマンドのクラスを追加する
app/ConsoleにKernel.phpというファイルがあると思います。それのprotect $commands =の中に
Commands\UpdateGrade::class,という記述を加えてください。以外と忘れがちです。
ここまで来たら、php artisan update_gradeと打つと作ったコマンドを動かすことができます。また、php artisan listと打つとatrisanで使えるコマンド一覧が表示されるのですが、その中にupdate_gradeも入っていることがわかると思います。
4. crontabに自動実行の設定を書き込む
3.までで作ったコマンドを自動で実行できるようにするのがcrontabの役割です。まず、
crontab -eと打ちます。
そうするとエディタが出てくるので、それに設定の記述を追加します。詳細な書き方はこちらを見ていただくとして、1つ気をつけなければいけないのは、手動での実行時はphp artisan update_gradeだけでよかったのですが、crontabにはphpとartisanの絶対パスを書かなければいけないことです。
例えば15 1 1 * * /usr/local/lib/php-7.1.23/bin/php /home/username/www/system/artisan update_gradeという設定を書き込むと、毎月1日午前1時15分に今回作ったupdate_gradeコマンドが実行されるようになります。
なお、crontabに設定されているコマンドの一覧はcrontab -lで見ることができます。
これを使って、結構いろいろなことができそうですね。例えば毎月1回いらないファイルを削除するとか。ぜひ使い方をマスターしたいものです。
- 投稿日:2019-03-10T06:03:00+09:00
Laravelのバリデーション処理
Laravel5.4のバリデーションについて記載
1.Routeにフォームの送信先を記述
Route::post('/formurl/','ServiceController@validateRequest');2.Controllerにvalidateを行う項目と内容を記述
public function validateRequest(Request $request){ $this->validate($request, [ //処理内容の指定(useridは必須、最大4文字) 'userid' => 'required|max:4', ], //エラー文言の指定 [ 'userid.required' => ':attributeは必須です。', 'userid.max' => ':attributeは4文字を超えています。', ], //attributeに表示される表示名称の指定 [ 'userid' => 'ユーザーID', ]); }3.続いてエラー処理の記述
エラーメッセージ、入力内容をリダイレクト先に付与if($validator->fails()){ return redirect('/formurl') ->withErrors($validator) ->withInput(); } else { }4.失敗時にリダイレクト先でエラーメッセージの取得
index.blade.phpでの取得@foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeachControllerや、view composerで取得したい場合
//エラーメッセージ $_session = session()->all(); $_error_msg = $_session['errors']->default; //前回の入力内容 $_session = session()->all(); $_old_input = $_session['_old_input'];以上