2017-12-18 154 views
0

是否可以将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

+0

这应该工作,如果你添加myRequest到控制器 – madalinivascu

+0

myRequest是扩展请求类,所以这应该工作 – madalinivascu

+0

检查出我的更新问题 – Norgul

回答

0

我没有发现即使用我的自定义类扩展Request也没有可能做我想要的,因为自然地,一个方法在获得另一个类时需要一个类的实例。

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

我的观点是,我从一开始就错了,它更多的是一个架构问题,所以我将我的应用程序转换为不同的方法,并设法避免这样的问题。

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方法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类的其他东西 - 他们只是想从请求类中获取数据,就是这样。

+0

我不认为你明白我要求。当我将照明请求转发到以MyRequest为参数的方法时,我收到错误 – Norgul

+0

这是因为您在那里传递了无效对象。在控制器中你应该有一个公共函数controllerMethod(\ App \ Http \ Requests \ MyRequest $ request)',然后在控制器方法中可以使用:'$ this-> userRepository-> signup($ request)'没有任何问题。现在你在控制器中使用'\ Illuminate \ Http \ Request',所以它不会工作,正如我在我的回答中所解释的 –

+0

我知道我在传递什么:)我正在寻求一种可能的解决方法。我知道这些是两个不同的类:) – Norgul