Laravel 入門 1日目 | Route の基本
PHPLaravel
こんにちは。なんかブログのデザインをちゃんと練り直そうかなと思っています。あと react-markdown よりも MDX のほうがつかいやすそうなので変えようかな〜とか。
Laravel 8 Route
基本を公式ドキュメントから抜粋します。
routes/web.php
にルートを定義していきます。
Hello World
/greeting にアクセスすると、 Hello World 文字列を表示しています。
use Illuminate\Support\Facades\Route; // 最初から読み込まれているので以下は省略 Route::get('/greeting', function () { return 'Hello World'; });
Controller を通してのアクセス
最もよく使う?のはこの書き方でしょうか。
// routes/web.php use App\Http\Controllers\UserController; Route::get('/user', [UserController::class, 'index']);
※ Laravel 7 までは、Controller の呼び出しは下記の書き方だったので注意。8 では、↑の書き方になりました。
// routes/web.php Route::get('/user', 'UserController@index');
リダイレクト
リダイレクトさせるには下記のように書きます。
Route::redirect('/古いURI', '/リダイレクト先のURI');
デフォルトでは、 Route::redirect
は 302 リダイレクトをします。302 リダイレクトは短期的なリダイレクトで SEO の評価も受け継がないので、301 リダイレクトさせたいときが多いかと思います。そのときは、
Route::redirect('/古いURI', '/リダイレクト先のURI', 301); // または Route::permanentRedirect('/古いURI', '/リダイレクト先のURI');
のように書きます。
View を返す
Laravel 初期状態では、トップページは
Route::view('/', 'welcome');
のようになって welcome
view を表示させています。完全な静的ページを返す場合に使うのかな。
view に パラメータを渡す場合は、以下のようにします。
// routes/web.php Route::get('/passvar/{id}', function ($id) { return view('welcome', compact('id')); }); // resouce/view/welcome.blade.php {{$id}}
上記の場合、パラメータは必須なので、パラメータを入力しない場合エラーになってしまいます。
パラメータをオプションにするには、下記のようにします。
Route::get('/passvar/{id?}', function ($id = null) { return view('welcome', compact('id')); });
Controller を使って View に変数を渡す
<?php // HelloController.php namespace App\Http\Controllers; use Illuminate\Http\Request; class HelloController extends Controller { public function index() { return 'Hello World!'; } public function view() { // a. view 変数を用意 $data = [ 'message' => 'Hello World!!' ]; // b, テンプレートを呼び出す return view('hello.view', $data); // hello.view = /resouces/view/hello/view.blade.php を指す。view の部分はアクション名(12行目)と同じにする習わし } }
// route/web.php Route::get('/hello/view', [HelloController::class, 'view']);
// resources/views/hello/view.blade.php <p>{{$message}}</p>
上記の例では、/hello/view にアクセスすると Hello World!! が表示される。
Route Groups
route は同じ階層にグルーピングすることができる。上記のサンプルの hello 配下のルートは、下記のように prefix
でまとめられる。
// route/web.php Route::prefix('hello')->group(function () { Route::get('/', [HelloController::class, 'index']); Route::get('/view', [HelloController::class, 'view']); Route::view('/staticpage', 'hello.staticpage'); // 静的なページ });