前提・実現したいこと
現在、laravelで開発を行う中で、暗黙の結合を用いてモデル結合を行なっているのですが、取得したidを正の整数判定を行いたいと考えています。
発生している問題・エラーメッセージ
preg_matchを使って、正規表現を判定しているのですが、URIのセグメントに「3-1」、「
03」などを入力してもバリデーション(正の整数でなければ、404を返す)が効かずに判定が通ってしまいます。デバックで確認しても上記のセグメントは「3」と判定されているみたいです。
暗黙の結合で、取得したデータはバリデーションが効かないのでしょうか?
■ Controller
PHP
1public function job(ComJob $comjob, Request $request) 2 { 3 if(!preg_match('/^0$|^-?[1-9][0-9]*$/', $comjob->id)) 4 abort(404); 5 6 dd($comjob->id); 7 8//以下省略 9} 10 11
■ Route
PHP
1Route::get('/joblist/{comjob}', 'Main\JobList@job');
試したこと
・タイポチェック
・正規表現の確認
・デバック
・下記のように、URIセグメントに{id}を入れて、コントローラー側でデバックした時は、preg_matchが機能していることを確認。
PHP
1Route::get('/joblist/{id}', 'Main\JobList@job');
PHP
1public function job($id, Request $request) 2 { 3 if(!preg_match('/^0$|^-?[1-9][0-9]*$/', $id)) 4 abort(404); 5 6 dd($comjob->id); 7//以下省略 8}
補足情報(FW/ツールのバージョンなど)
・MacOS BigSur Ver.11.2.3
・PHP 7.3.24
・Laravel Framework 6.20.30
あなたの回答
tips
プレビュー