Laravelでコントローラを作ってみます。
Laravelのディレクトリで以下のコマンドを実行することでひな形を作成できます。
php artisan make:controller TestController
app/Http/Controllers に TestController.php が自動生成されます。
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; class TestController extends Controller { // }
index を呼び出すようルーティングしている場合は以下のように index 関数を作成します。
public function index() { return view('index'); }
view ではビューファイルの名前を指定します。
index を指定しているので、resources/index.blade.php が読み込まれます。
resources からの相対パスなので、resoureces/test/index.blade.php を読み込みたい場合は以下のように指定します。
public function index() { return view('test/index'); }
次に /edit/2 のように id を指定して編集画面を表示するようルーティングしている場合は以下のように書きます。
public function edit($id) { $test = Test::findOrFail($id); return view('edit', compact('test')); }
まず引数の $id ですが、これはルーティングの指定と一致させる必要があります。
Test::findOrFail は Eloquent の Model として Test クラスを定義している場合に主キー指定でレコードを取得する処理です。
そして view では edit.blade.php を読み込んでいます。2つめの引数ではビューに渡したいパラメータを指定します。
compact(‘test’) は [‘test’ => $test] という意味で、
これによって edit.blade.php から $test にアクセスできるようになります。
複数種類のパラメータを渡したい場合は compact に複数渡します。
post の処理も作ってみます。
/create に post した場合に create 関数が呼ばれるようルーティングしている場合は以下のように書きます。
public function create(Request $request) { $test = new Test(); $test->value = $request->value; $test->save(); return redirect('/'); }
引数の $request には post の情報が入っています。
バリデーションなどを行いたい場合は TestRequest クラスなどを作成し、引数を置き換えてやります。
$request->value は post 情報から value パラメータを取得する場合の例ですので、post データに value=2 のように name が value であるデータを含んでいる必要があります。
なので post データが test=3&test2=5 などであれば、
$request->test や $request->test2 となります。
そして最後の return redirect(‘/’) はルートにリダイレクトしています。
名前付きルートを定義している場合は以下のように名前指定で書くこともできます。
return redirect()->route('test.index');
view と同様に2つ目の引数でURLパラメータを渡すことができます。
コントローラの処理中にエラーがあってビューにエラーを返したい場合は以下のように書きます。
return back()->withErrors([ 'value' => 'エラーメッセージ', ])->withInput();
backとすることで元の画面に戻します。
withErrorsで項目名とエラーメッセージの辞書を渡し、withInputをつけることで元の画面での入力値を復元します。