- 1. 概要
- 2. get
- 3. post
- 4. any
- 5. リダイレクト
- 6. 分割
- 7. 確認
1. 概要
既に(2021年3月18日)、少し書いているかもしれないが、ルーティングのメモを・・・。
本ページは、下記のサイトを参考にさせていただきました。
「Laravel のルーティングチートシート」
「【入門】Laravel の Controller について」
2. 設定
ルーティングの記述は
ドキュメントルート/routes/
中に書いてあって。
今のところ(2021年3月18日)
ドキュメントルート/routes/web.php
しかさわっていません。
バージョン 8.33.1 のデフォルトでは、コメントをのぞけば、前半の
[/usr/home/hogehoge/lang/php/laravel/laravel8.33.1/routes/web.php] というファイルが、なかったですじゃ・・・。
の部分と後半の
[/usr/home/hogehoge/lang/php/laravel/laravel8.33.1/routes/web.php] というファイルが、なかったですじゃ・・・。
の部分のみです。
3. post
なるほどな、とデフォルトのを真似て、全部「get」で書いておりました。
で、リンクチェックを自作の「Python」のプログラムでやっておるのですが・・・。
いきなり、ルートの
requestLink = request.Request(URI, data='データ', headers='ヘッダ', method='POST')
html = urllib.request.urlopen(requestLink, timeout=10)
で
HTTP Error 405: Method Not Allowed
てなエラーになっちゃいました。
これ「post」を送っているからだそうで
Route::get('/', function () { return view('ビュー'); });
と同時に
Route::post('/', function () { return view('ビュー'); });
も書かないとエラーになっちゃうようです。
4. any
しかし、2行ずつ書くのは面倒だなと思っていたら、下記の書き方があるようです。
Route::any('/', function () { return view('ビュー'); });
これだと、「get」「post」どちらも処理してくれるようです。
しかし、参考サイトに「基本使わないけど」って書いてあるのが気になりますけどね。
わたしは、逆に特定のサイトでは、「any」しかつかってません。
5. リダイレクト
多分、こゆことしている方、そこそこいらっしゃるんじゃないかと思うのですが、「404 not found」が発生したとき、特定のページへリダイレクトするという・・・。
他のエラーでもしている方もいらっしゃるようです。
今まで、「/usr/local/etc/apache24/Includes/*.conf」に
<VirtualHost *:80>
ServerName サーバ名
DocumentRoot /パス
ErrorDocument 404 /リダイレクト先
</VirtualHost>
てな書き方をするか、「.htaccess」でリダイレクト先を書くかすれば、うまくいっていたのですが、「Laravel」では、そうはいかないようです。
上記の書き方で解説しているサイトが、そこそこあるのですが、バージョン違いのためか、うまくいかない。
下記のサイトの内容で、うまくいきました。
「Laravel 存在しないページにアクセスされたとき404ページではなく特定のページにリダイレクトさせる方法 – 半力投球」
すなわち
routes/web.php
に
Route::fallback(function()
{
return redirect('転送先');
});
と書けば、思い通りになります。
ただし、今んとこ、転送先は、フルドメインで書く方法しか知りません。
6. 分割
サイト内のページが、10 や 20、2桁の間はルーティングに関する情報も
routes/web.php
1ファイルで、収まりがつきますが、4桁を超えてくると 1ファイルで書くには長すぎるし、どこに何が書いてあるんだか整理できなくなります。
そうなると、ファイルを分割してメンテナンスしていきたいと思うのは、人情です。
「Laravel」には、その方法も用意されいているのですが、どうもバージョンによって、対象方法が違うようです。
わたしが、試したのは「Laravel Framework 8.30.1」になりますが、下記のサイトの方法が適用できました。
「【Laravel】route web.php 分ける - かまてく ブログ」
例えば、「routes/web.php」の内容の1部を
routes/extra.php
に分けて書くとして。
app/Providers/RouteServiceProvider.php
の
/**
* Define your route model bindings, pattern filters, etc.
*
* @return void
*/
public function boot()
{
$this->configureRateLimiting();
$this->routes(function () {
Route::prefix('api')
->middleware('api')
->namespace($this->namespace)
->group(base_path('routes/api.php'));
Route::middleware('web')
->namespace($this->namespace)
->group(base_path('routes/web.php'));
});
}
の部分を変更します。
48行と49行との間に、下記のように書き入れるだけです。
Route::middleware('web')
->namespace($this->namespace)
->group(base_path('routes/web.php'));
Route::middleware('web')
->namespace($this->namespace)
->group(base_path('routes/extra.php'));
});
更に、サブディレクトリに分けることも可能で
routes/etc/extra.php
と作成して、「app/Providers/RouteServiceProvider.php」に
Route::middleware('web')
->namespace($this->namespace)
->group(base_path('routes/web.php'));
Route::middleware('web')
->namespace($this->namespace)
->group(base_path('routes/etc/extra.php'));
});
と書くだけです。
7. 確認
下記のコマンドで、ルーティングの状況を確認できます。
php /プロジェクトパス/artisan route:list
ただし、権限の問題があって、「root」ユーザ権限でないとエラーになります。
サイトの構成によって、なんか出力内容が異なったりするのですが、一般には
+--------+----------------------------------------+-------------------+------+---------+------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+----------------------------------------+-------------------+------+---------+------------+
| | GET|HEAD|POST|PUT|PATCH|DELETE|OPTIONS | / | | Closure | web |
| | GET|HEAD | api/user | | Closure | api |
| | | | | | auth:api |
| | GET|HEAD|POST|PUT|PATCH|DELETE|OPTIONS | 伏字 | | Closure | web |
| | GET|HEAD|POST|PUT|PATCH|DELETE|OPTIONS | 伏字 | | Closure | web |
・・・ 略 ・・・
| | GET|HEAD|POST|PUT|PATCH|DELETE|OPTIONS | 伏字 | | Closure | web |
| | GET|HEAD|POST|PUT|PATCH|DELETE|OPTIONS | 伏字 | | Closure | web |
+--------+----------------------------------------+-------------------+------+---------+------------+
と出力されるのですが、わたしの持っているあるサイトでは、下記のように表示されました。
ANY / ..................................................................................................
POST _ignition/execute-solution ignition.executeSolution ? Spatie\LaravelIgnition ? ExecuteSolutionContr…
GET|HEAD _ignition/health-check ....... ignition.healthCheck ? Spatie\LaravelIgnition ? HealthCheckController
POST _ignition/update-config .... ignition.updateConfig ? Spatie\LaravelIgnition ? UpdateConfigController
GET|HEAD api/user ...........................................................................................
ANY 伏字 ...............................................................................................
ANY 伏字 ...............................................................................................
GET|HEAD sanctum/csrf-cookie .............. sanctum.csrf-cookie ? Laravel\Sanctum ? CsrfCookieController@show
ANY 伏字 ...............................................................................................
GET|HEAD 伏字 ...............................................................................................
Showing [10] routes
|