【问题标题】:How should I do Exception on Laravel5 Resource Controller?我应该如何在 Laravel 资源控制器中处理异常?
【发布时间】:2016-12-22 06:30:03
【问题描述】:

我知道 Laravel5 资源方法会这样工作。

TestControler@index /aa TestControler@edit /aa/{aa}/edit ..

如果插入了整数就很好了。 /aa/1/edit -> 工作

但是如果字符串来了,它会坏掉。 /aa/aa/edit -> SQLSTATE[22P02]: 无效的文本表示..

所以我想问你一个问题是我应该如何只允许请求 url 是整数?

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

【问题讨论】:

  • 想想这可能就是你在说的:laravel.com/docs/5.2/…
  • 就是这样!!这对我来说很棒。非常感谢:)
  • 我应该将其放入答案中,以便您可以为遇到此问题的其他人接受它吗?
  • 好人!我必须阅读文件真的哈哈。

标签: php postgresql laravel laravel-5 laravel-routing


【解决方案1】:

扩展我的评论:

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

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

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

Route::get("users/{id}", "Users@getUser")->where(["id" => "[0-9]+"]);

此功能的文档说明:

您可以使用路由实例上的 where 方法来限制路由参数的格式。 where 方法接受参数的名称和定义如何约束参数的正则表达式

在此处的可用文档中查看更多示例:https://laravel.com/docs/5.2/routing#parameters-regular-expression-constraints

【讨论】:

    【解决方案2】:

    感谢回复,终于成功了。

    但我想将此添加到我的帖子中。

    当我像这样编写“标准”路由时,方法将起作用。

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

    但如果我这样写“RESTful”路由,那就不行了。

    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]+');
    

    【讨论】:

      猜你喜欢
      • 2020-02-12
      • 1970-01-01
      • 2014-06-06
      • 1970-01-01
      • 2015-05-07
      • 1970-01-01
      • 1970-01-01
      • 2021-04-01
      • 1970-01-01
      相关资源
      最近更新 更多