3 回答
TA贡献1802条经验 获得超5个赞
在您的路由定义中,您可以对参数使用约束以避免匹配:
Route::get('school/{school}/edit', 'SchoolController@edit')
->where('school', '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$');
这将导致 404,因为路由不匹配无效的 UUID。有关此主题的更多信息可以在文档中找到。还有一个解释如何定义一个全局约束以避免对每条路由重复它。
对于资源路由,解决方案略有不同。您将需要在boot()您的方法中定义一个全局约束RouteServiceProvider:
Route::pattern('school', '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$');
如果您的资源与路由参数的调用方式不同,则需要在定义路由资源时自定义参数名称:
Route::resource('university', 'UniversityController', [
'parameters' => ['university' => 'school']
]);
注意:这只是为了说明,我怀疑你需要它......
TA贡献1780条经验 获得超1个赞
是的,请检查 id 是否退出然后返回数据,否则重定向到 404。
或者您可以使用 Eloquent findOrFail 方法。示例:
$model = App\Flight::findOrFail(1);
如果找不到记录,这将自动重定向到 404。
TA贡献1900条经验 获得超5个赞
我相信您在其他地方遇到了一个问题,它以某种方式干扰了模型分辨率,应该更深入地了解原因(也许像一个包?)。
作为一种解决方法,您可以使用显式绑定来防止此错误
在您的RouteServiceProvider.php文件中
use Ramsey\Uuid\Uuid;
...
public function boot()
{
parent::boot();
Route::bind('school', function ($value) {
if (! Uuid::isValid($value)) {
throw (new ModelNotFoundException)->setModel(School::class, $value);
}
return School::findOrFail($value);
});
}
但是,这只是为了修补不应该存在的错误。
- 3 回答
- 0 关注
- 183 浏览
添加回答
举报