Php Laravel:使用路由/模型绑定时访问表单请求中的模型实例
我在我的项目中为我的一个模型设置了一些路由/模型绑定,效果很好。我能够在路由路径中使用绑定,并接受模型的实例作为控制器中相关方法的参数 现在我正在尝试使用这个模型做一些工作,所以我在我的控制器中创建了一个接受表单请求的方法,这样我就可以执行一些验证Php Laravel:使用路由/模型绑定时访问表单请求中的模型实例,php,laravel,laravel-5,Php,Laravel,Laravel 5,我在我的项目中为我的一个模型设置了一些路由/模型绑定,效果很好。我能够在路由路径中使用绑定,并接受模型的实例作为控制器中相关方法的参数 现在我正在尝试使用这个模型做一些工作,所以我在我的控制器中创建了一个接受表单请求的方法,这样我就可以执行一些验证 public function edit(EditBrandRequest $request, Brand $brand) { // ... 我的模型的每个不同实例都可以进行不同的验证,因此我需要能够使用模型的一个实例来构建一组自定义的验证
public function edit(EditBrandRequest $request, Brand $brand)
{
// ...
我的模型的每个不同实例都可以进行不同的验证,因此我需要能够使用模型的一个实例来构建一组自定义的验证规则
是否有方法获取从表单请求注入控制器的模型实例?
我已经尝试在表单请求的构造函数中使用类型暗示模型实例
class EditBrandRequest extends Request
{
public function __construct(Brand $brand)
{
dd($brand);
}
我还尝试了在表单请求的rules()
方法中使用类型提示模型实例
class EditBrandRequest extends Request
{
// ...
public function rules(Brand $brand)
{
dd($brand);
'address' => 'required|unique:addresses,address,' . $this->route('address')->id,
在这两种情况下,我都得到了模型的空/新实例,而不是我期望的实例
当然,我可以通过不处理表单请求来解决这个问题,只需在控制器中生成规则并手动进行验证——但如果可能的话,我宁愿使用Laravel方法
谢谢您可以使用绑定键简单地访问它,因此,例如,如果您绑定
品牌
模型:$router->model('Brand','\App\Brand')
您可以使用$this->Brand
获得您的模型实例。以下是验证规则示例:
'slug' => 'required|unique:brand,slug,' . $this->brand->id,
编辑
有时,您可能有一个与绑定键使用相同名称的输入名称,例如,如果您将地址
模型绑定为地址
,则您有一个输入字段地址
,这将使Laravel混淆。对于这种情况,可以使用route()
方法
class EditBrandRequest extends Request
{
// ...
public function rules(Brand $brand)
{
dd($brand);
'address' => 'required|unique:addresses,address,' . $this->route('address')->id,
传奇-完美的作品!就这么简单。谢谢从第4版开始使用Laravel,不知道它这么简单-谢谢!你能详细说明一下$router->model函数放在哪里吗?@Eamon你可以把那一行放在
routes/*.php
中,但是注册绑定的正确方法是RouteServiceProvider.php
的boot
方法,例如Route::model('user',App\user::class)
或Route::bind('username',函数($username){return User::where('username','=',$username)->firstOrFail();});
-请参阅: