将请求转换为自定义验证请求

问题描述 投票:0回答:2

是否有可能将Illuminate\Http\Request转换为使用php artisan make:request MyRequest制作的自定义验证请求?

我希望在未来的方法中进行验证,以便我有:

protected function register(Request $request)
{
   ...
   $this->userRepository->signup($request)
   ...
}

用户存储库:

public function signup(MyRequest $request)
{
    ...
}

这可能吗?我现在收到一个错误,因为预计会有一个班级。只有想到的是制作一个界面,但我不确定它是否可以起作用。

我得到的错误

类型错误:传递给UserRepository :: signup()的参数1必须是App \ Http \ Requests \ MyRequest的实例,给出Illuminate \ Http \ Request的实例

php laravel laravel-5 laravel-validation laravel-request
2个回答
0
投票

是的,没有问题,您应该创建:

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class MyRequest extends FormRequest
{
   public function rules() {
       // here you put rules
   }
}

并在您的控制器中:

public function signup(\App\Http\Requests\MyRequest $request)
{
    ...
}

请注意,您还应该在请求类中调整authorize方法(根据用户访问权限返回true或false)

编辑

更新后 - 你应该在控制器和存储库中输入提示你的自定义类 - 这取决于你 - 我经常使用通用的Illuminate\Http\Request,所以你应该这样做:

在控制器中:

public function controllerMethod(\App\Http\Requests\MyRequest $request)

在存储库中:

public function signup(\App\Http\Requests\MyRequest $request)

要么

public function signup(\Illuminate\Http\Request $request)

总而言之,你应该在控制器中使用Form请求类 - 这是进行验证的地方,之后你可以使用相同的类或通用的\Illuminate\Http\Request - 我个人经常在存储库或服务中使用\Illuminate\Http\Request,因为他们通常不会关心放入MyRequest类的其他东西 - 他们只是想从请求类中获取数据,就是这样。


0
投票

即使我的自定义类扩展了Request,我也没有发现可以做我想要的事情,因为当然一个方法需要一个类的实例而另一个类获得另一个类。

也许有可能提取出一个接口并包装和绑定它,但这在我看来是一个quickfix。

我的观点是,我从一开始就认为这个概念是错误的,而且更多的是一个架构问题,所以我将我的应用程序转换为不同的方法,并设法首先避免这些问题。

© www.soinside.com 2019 - 2024. All rights reserved.