转换请求到自定义验证请求
是否可以将Illuminate\Http\Request
转换为您使用php artisan make:request MyRequest
进行的自定义验证请求?转换请求到自定义验证请求
我想验证,以发生在方法的道路,使我有:
protected function register(Request $request)
{
...
$this->userRepository->signup($request)
...
}
用户信息库:
public function signup(MyRequest $request)
{
...
}
这可能吗?我现在正在收到一个错误,因为预计会有一个类。唯一想到的就是制作一个界面,但我不确定它是否可以正常工作。
错误,我得到
Type error: Argument 1 passed to UserRepository::signup() must be an instance of App\Http\Requests\MyRequest, instance of Illuminate\Http\Request given
我没有发现即使用我的自定义类扩展Request
也没有可能做我想要的,因为自然地,一个方法在获得另一个类时需要一个类的实例。
也许它可能会提取一个接口并包装和绑定它,但这在我看来是一个quickfix。
我的观点是,我从一开始就错了,它更多的是一个架构问题,所以我将我的应用程序转换为不同的方法,并设法避免这样的问题。
是的,有与无的问题,您应该创建:
<?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
方法ST类(返回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)
所以总结起来,你应该在控制器使用表格请求类 - 这是验证将进行的地方,以后你可以使用同一个类或通用\Illuminate\Http\Request
- 我个人经常在\Illuminate\Http\Request
中使用版本库或服务,因为他们通常不关心放入MyRequest
类的其他东西 - 他们只是想从请求类中获取数据,就是这样。
我不认为你明白我要求。当我将照明请求转发到以MyRequest为参数的方法时,我收到错误 – Norgul
这是因为您在那里传递了无效对象。在控制器中你应该有一个公共函数controllerMethod(\ App \ Http \ Requests \ MyRequest $ request)',然后在控制器方法中可以使用:'$ this-> userRepository-> signup($ request)'没有任何问题。现在你在控制器中使用'\ Illuminate \ Http \ Request',所以它不会工作,正如我在我的回答中所解释的 –
我知道我在传递什么:)我正在寻求一种可能的解决方法。我知道这些是两个不同的类:) – Norgul
这应该工作,如果你添加myRequest到控制器 – madalinivascu
myRequest是扩展请求类,所以这应该工作 – madalinivascu
检查出我的更新问题 – Norgul