【问题标题】:Laravel - How to get model name or instance from route for store resourceLaravel - 如何从商店资源的路线中获取模型名称或实例
【发布时间】:2020-03-19 11:27:39
【问题描述】:

我正在尝试让模型获取表单请求的表名,以进行验证以存储新模型。 我有几个模型在表中具有相同的结构(id、name、lang_id)。 因此,为了使我的代码尽可能“干燥”,我想对所有这些模型使用相同的验证来检查新条目是否是唯一的,如下所示:

public function rules( Request $request) { 
  return [
    "nameFr"  => "required|unique:" . $table .",name|min:3|max:100",
    "nameEn"  => "required|unique:" . $table . ",name|min:3|max:100",
];

我已经在表单请求验证中的更新请求中对此进行了测试,并且确实使用以下方法获取了表名:

$table = collect( $this->route()->parameters() )->first()->getTable();

在表单请求验证中尝试存储请求:

$table = collect( $this->route()->parameters() );

只返回一个空集合。

好像参数还没有添加到路由中。

我有办法得到它,但使用起来不那么干净:

$table = explode( "/", $request->url()  ); // --> returns an array

array:5 [
  0 => "http:"
  1 => ""
  2 => "domain.local"
  3 => "admin"
  4 => "mymodels"
]

然后:

$table = end ($table); // --> To get the last part of the uri which is the part I need "mymodels"

如果 URI 发生变化,向 URI 添加另一个段,我可能不得不更新代码。

知道我该怎么做吗?

【问题讨论】:

  • 我看过很多 Laravel 项目,只是硬编码,你正在解决一个不存在的问题。
  • 资源的存储路径没有参数。正如@mrhn 所说,您正在为自己创造工作。只需为每个控制器使用一个 FormRequest 类。
  • 是的,这正是我首先要做的!我正在尝试重构我的代码,使其更干净。谢谢
  • @miken32 - 所以我能理解。为什么没有带有商店路线的参数?它绑定到要存储的模型。
  • 如果您使用artisan route:list 查看路由定义,您可以看到。路由参数位于 URL 中,带有大括号,用于更新或显示等请求,因为它们引用现有对象。对于 store 请求,还没有对象,所以没有 ID 来表示它。

标签: laravel model routes


【解决方案1】:

有两种解决方案:

1.使用Request::segments()
您可以通过Request facade 检索请求 URI 段

public function rules( Request $request) {
   dd($request->segments(),
      \Illuminate\Support\Facades\Request::segments(),
       $request->segment(1));
   //$table=$request->segment(1);
}

2。在网络路由中使用路由参数 您可以通过{variablename}检索部分网址并将其作为变量发送到控制器中

Route::post('/admin/{modelname}/get',function($modelname){ dd($modelname); });

【讨论】:

  • 谢谢哈米德。我将使用您的第一个解决方案。
猜你喜欢
  • 2018-08-22
  • 1970-01-01
  • 1970-01-01
  • 2021-01-02
  • 1970-01-01
  • 1970-01-01
  • 2015-10-09
  • 2013-06-06
  • 1970-01-01
相关资源
最近更新 更多