【Laravel ver.8.x】ルーティングの設定(7.xからの変更点)
Laravelの勉強を始めた。
のはいいのだが、使っている本がver6.xベースである為
最新版である8.xからだいぶ様変わりしていて絶賛混乱中。
ということで、自分のためのメモ代わりとして記録。
初学者のため、間違い等ありましたらご指摘いただけるとありがたいです。
開発環境
MacOS Catalina 10.15.7
Laravel 8.20.1
PHP 7.4.12
Apache 2.4.41
MySQL 5.7.32
作成したコントローラのルーティング
MVCに準拠した形でコントローラを作成し、そのコントローラへのルーティングを通したい。
ver8.xからルーティングの書き方に大きな変更が加わった。
なぜこんな変更をしたのかはまるで分からない。
Railsしか触ったことがないので、めんどくさくて仕方がない。
想定しているコントローラはこんな感じ
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class HelloController extends Controller
{
public function index(){
return <<< EOF
<html>
<head>
<title>Hello</title>
<style>
body {font-size: 16px; color:#999; }
h1 {font-size:100px; text-align:right; color:#eee; margin: -40px 0 -50px 0}
</style>
<body>
<h1>Index</h1>
<p>HelloController's sample</p>
</body>
</html>
EOF;
}
}
ver7.xまでのルーティングの書き方
//前後省略
Route::get('hello', HelloController@index);
ver8.x以降のルーティングの書き方
//前後省略
use App\Http\Controller\HelloController;
Route::get('hello', [HelloController::class, 'index']);
変更点
1. ルーティングを通すために、当該コントローラの名前空間をインポートする
2. コントローラ名@アクション名
という書き方がそもそも変わった。
(20.12.29追記) シングルアクションコントローラの場合
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class HelloController extends Controller
{
//アンダースコアが2本ってのがなんとなく気に食わない
public function __invoke(){
return <<< EOF
//以下略
}
}
//前後省略
//7.xまで
Route::get('hello', HelloController);
//8.xから
use App\Http\Controller\HelloController;
//7.x同様、メソッド名の明記なし。そのため[]も不要
Route::get('hello', HelloController::class);
参考文献
Laravel公式リファレンス(再翻訳中)Laravel 8.x ルーティング
Laravel公式リファレンス(再翻訳中)Laravel 8.x コントローラ
7968様【PHP超入門】名前空間(namespace・use)について
Author And Source
この問題について(【Laravel ver.8.x】ルーティングの設定(7.xからの変更点)), 我々は、より多くの情報をここで見つけました https://qiita.com/tsuchinoko0102/items/de7d46d7eaf19e178cf5著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .