Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 我应该如何在Laravel5资源控制器上执行异常?_Php_Postgresql_Laravel_Laravel 5_Laravel Routing - Fatal编程技术网

Php 我应该如何在Laravel5资源控制器上执行异常?

Php 我应该如何在Laravel5资源控制器上执行异常?,php,postgresql,laravel,laravel-5,laravel-routing,Php,Postgresql,Laravel,Laravel 5,Laravel Routing,我知道Laravel5资源方法将像这样工作 Route::get('/aa/{aa}/edit','TestsController@delete')->name('aa.edit')->where('aa','[0-9]+'); // works great! Route::resource('/aa', 'TestsController')->where('aa','[0-9]+'); // not work! TestControler@index/aa TestCon

我知道Laravel5资源方法将像这样工作

Route::get('/aa/{aa}/edit','TestsController@delete')->name('aa.edit')->where('aa','[0-9]+'); // works great!
Route::resource('/aa', 'TestsController')->where('aa','[0-9]+'); // not work!
TestControler@index/aa TestControler@edit/aa/{aa}/edit

如果插入了integer,则可以正常工作。 /aa/1/编辑->工作

但如果绳子来了,它会断的。 /aa/aa/edit->SQLSTATE[22P02]:无效的文本表示法

所以我想问你的问题是,我应该如何允许请求url仅为整数

我应该在哪里写,route.php还是Controller? 以及如何在字符串出现时中止404。
有什么想法吗?

继续我的评论:

使用Laravel的路由器时,对于添加到URI定义中的任何参数(如
{id}
),都可以添加regex约束。约束将获取变量值并测试正则表达式是否与该值匹配。如果正则表达式失败,则不会选择路由

您可以使用路由上的
where()
方法执行此操作,并传递一个关联数组,其中键对应于URI中的变量,值是要匹配的正则表达式。您可以向路由URI中任意多的变量添加约束

例如,如果您想将URI中的id值仅限制为数字,可以执行以下操作:

Route::get("users/{id}", "Users@getUser")->where(["id" => "[0-9]+"]);
此功能的文档说明:

可以在管线实例上使用where方法约束管线参数的格式。where方法接受参数的名称和一个正则表达式,该正则表达式定义如何约束参数


请参阅此处提供的文档中的更多示例:

感谢您的回复,最终它非常有效

但我想把这个加到我的帖子里

当我像这样编写“标准”路由时,方法将在何处工作

Route::get('/aa/{aa}/edit','TestsController@delete')->name('aa.edit')->where('aa','[0-9]+'); // works great!
Route::resource('/aa', 'TestsController')->where('aa','[0-9]+'); // not work!
但如果我像这样编写“RESTful”路由,那就行不通了

Route::get('/aa/{aa}/edit','TestsController@delete')->name('aa.edit')->where('aa','[0-9]+'); // works great!
Route::resource('/aa', 'TestsController')->where('aa','[0-9]+'); // not work!
所以我把它写到app/route.php,它工作得非常好

Route::pattern('aa', '\d+');
Route::get('/aa/{aa}/delete','TestsController@delete')->name('aa.delete')->where('aa','[0-9]+');
Route::resource('/aa', 'TestsController')->where('aa','[0-9]+');

想一想这可能就是你所说的:就是这样!!这对我来说是一项伟大的工作。非常感谢:)我可以把它写进一个答案吗?这样你就可以为任何遇到这个问题的人接受它了吗?当然可以!我必须读文件真的笑。