ルーティング
ルーティング
ルートパラメータ
Route::get('hello/{id}/{name}', 'HelloController@index');
※ アクションメソッドpublic function index(int $id, string $name)
接頭辞
Route::prefix('members')->group(function() {
Route::get('info', 'HelloController@info'); // /member/info
});
ルート名の定義
Route::get('info', 'HelloController@info')->name('infoinfo');
リソースルート
Route::resources('articles', 'ArticleController');
この1行だけで以下のアクションのルートが定義される。
index, show, create, store, edit, update, destroy
https://readouble.com/laravel/6.x/ja/controllers.html#resource-controllers
※ コントローラ作成コマンドに--resource --model=Xxx
を付けるだけで対応するアクションが生成される。php artisan make:controller ItemsController --resource --model=Article
リソースルートで生成されるルート
画面 | HTTPメソッド | パス | アクション |
一覧表示 | GET | /items | index |
詳細表示 | GET | /items/{item} | show |
登録フォーム | GET | /items/create | create |
登録処理 | POST | /items | store |
編集フォーム | GET | /items/{item}/edit | edit |
更新処理 | PUT | /items/{item} | update |
削除処理 | DELETE | /items/{item} | destroy |
コントローラ
レスポンス
responseヘルパー
responseヘルパーを使うとIlluminate\Http\Responseオブジェクトを取得することができる。return response('hello', 200)->header('Content-Type', 'text/plain');
return response()->view('xxx.yyy')->header('Content-Type', 'text/html');
※ 厳密には、引数を渡さない場合の戻り値はIlluminate\Routing\ResponseFactoryオブジェクトである
ただし、テンプレートの表示はResponseオブジェクトを介さずにviewヘルパーを使うのが一般的。return response()->view('xxx.yyy');
ではなくreturn view('xxx.yyy');
viewヘルパーの戻り値はViewオブジェクトだが、Responseオブジェクトのviewメソッドの戻り値はResponseオブジェクトである。
よって、cookie()などResponseクラスのメソッドを使う場合は、resopnse()->view()-->cookie()
とする必要があり、view()->cookie()
とすることはできない。
jsonメソッド
jsonメソッドでJSON形式のレスポンスを生成することができる。return response()->json(['id' => 1, 'name' => 'hoge']);
※ ヘッダはContent-Type: application/jsonになる
※ 配列をreturnするだけでもjsonレスポンスになる
downloadメソッド, streamDownLoadメソッド
return response()->download('./robots.txt', 'hoge.txt', ['content-type' => 'text/plain']);
return response()->streamDownload(function () {
print(
"1,hoge\n".
"2,hogehoge\n"
);
}, 'hoge.csv', ['content-type' => 'text/csv']);
※ ファイルをそのままブラウザに表示する場合はfileメソッドを使う
リダイレクト
redirectヘルパー
Illuminate\Http\RedirectResponseが返却される。 return redirect('xxx.yyy');
redirectヘルパーを引数無しで呼ぶと、Illuminate\Routing\Redirectorインスタンスが返され、Redirectorインスタンスのメソッドが呼び出せるようになる。
ex) ルート名によるリダイレクトreturn redirect()->route('hoge', ['id' =>999]);
外部サイトへのリダイレクト
return redirect()->away('https://google.com');
withInputメソッド
入力値をフラッシュデータとして保存することができる 。return redirect()->route('index2')->withInput();
リダイレクト先では$request->old('username', 'default')
のように取得可能。
また、oldヘルパーもあるのでviewで{{ old('username', 'default') }}
とすることが可能。
withメソッド
任意のデータをフラッシュデータとして保存することができる。return redirect()->route('index2')->with('msg', 'hoge');
取得は通常のセッションと同じだが、フラッシュなので一回で消える。
リクエスト
requestヘルパー
Illuminate\Http\Requestオブジェクトを取得することができる。request()->path();
アクションメソッドにRequest型の引数を定義するだけで、Requestオブジェクトを取得することもできる。
こちらの方が一般的。public function request(Request $request)
※ ルートパラメータも取得する場合は、Requestの後に引数を追加するpublic function request(Request $request, $id)
Requestオブジェクトのメソッド
header, root, server, url, fullUrl, path, ip,userAgentなど。
フォーム変数の取得
動的プロパティまたはinputメソッドを使う。
$request->name;
$request->input('name', 'default');
※ デフォルト値をセットできるので、inputメソッドの方が一般的
ファイルアップロード
$request->hasFIle('myfile') // ファイルが指定されているか
$myfile = $request->myfile; // ファイル取得
$myfile->isValid() // アップロードできているか
$myfile->getClientOriginalName() // 元ファイル名
$myfile->store('ディレクトリ名'); // ファイル名は自動生成。ディレクトリ名は/storage/appからの相対パス。
$myfile->storeAs('ディレクトリ名', 'ファイル名'); // ファイル名指定
ミドルウェア
アクションメソッドの前後に処理を実行させるための仕組み。
php artisan make:middleware XxxMiddleware
app/Http/MiddleWareに生成される。- handleメソッドに処理を追加
public function handle($request, Closure $next)
{
// アクション実行前
file_put_contents('./access.log', date('Y-m-d H:i:s') . "\n", FILE_APPEND);
$response = $next($request);
// アクション実行後
file_put_contents('./access2.log', date('Y-m-d H:i:s') . "\n", FILE_APPEND);
return $response;
}
※ ミドルウェアであることの条件は、handleメソッドを持つことだけ
- ミドルウェアをルーティングに登録する
Route::get('hello', 'HelloController@index')
->middleware(App\Http\Middleware\LogMiddleware::class);
- 全アクションで実行させる場合はグローバルミドルウェアとして登録する。
app/Http/Kernel.phpの$middleware配列に追加する。 - ミドルウェアの用途に応じてグループ化する。
app/Http/Kernel.phpの$middlewareGroups連想配列に追加する。
ルーティングでgroupメソッドの第1引数で指定する。Route::group(['middleware' => ['Xxx']], ]function() {
Route::get('hoge', 'HogeController@index');
});
クッキー
保存
Responseオブジェクトのcookieメソッドを使う。return response()->view('hello.request')->cookie('test_val', '100', 600);
レスポンスのところでも書いたが、cookieメソッドはResponseクラスのメソッドなのでviewヘルパーを使ってview()->cookie()
とすることはできない。
取得
Requestオブジェクトのcookieメソッドで取得することができる。$request->cookie('test_val');
セッション
設定
config/sesson.php'driver' => env('SESSION_DRIVER', 'file'),
など
読み書き
Requestオブジェクトのsessionメソッドで取得できる。
\Illuminate\Session\Storeオブジェクトのput, getメソッドを使う。
$request->session()->put('msg', 'hoehoge');
$request->session()->get('msg', 'default');
他にall, pull=取得後に削除, has, forget, flush, flash, reflash, regenerateなどのメソッドがある。
※ sessionヘルパーを使うこともできる。
session(['msg' => 'hogehgoe']);
$msg = session('msg', 'default');
SESSION_DRIVERをdatabaseにした場合、以下のコマンドでsessionsテーブルを作成する必要がある。php artisan session:table
php artisan migrate
フラッシュ
フラッシュとは次のリクエストでのみ維持される特殊なセッションのこと。
リダイレクト先でメッセージを表示させる場合などに便利。return redirect('request')->withInput();