Laravel 5使用参数进行表单请求验证

时间:2015-07-16 01:35:22

标签: laravel laravel-5

我正在使用表单请求验证,并且有一些规则需要外部值作为参数。

以下是我在表单请求类中编辑业务配置文件的验证规则,

public function rules()
{
    return [
        'name' => 'required|unique:businesses,name,'.$business->id,
        'url' => 'required|url|unique:businesses'
    ];
}

我可以通过提示类型在控制器上使用它。

公共职能postBusinessEdit(BusinessEditRequest $ request,Business $ business) {

}

但是如何将$ business对象作为参数传递给rules方法?

6 个答案:

答案 0 :(得分:9)

可以通过多种方式实现这一目标。我这样做。

您可以在商家表单中使用隐藏字段“id”,例如bellow,

{!! Form::hidden('id', $business->id) !!}

您可以在id中检索此FormRequest,如下所示

public function rules()
{
    $businessId = $this->input('id');

    return [
        'name' => 'required|unique:businesses,name,'.$businessId,
        'url' => 'required|url|unique:businesses'
    ];
}

答案 1 :(得分:5)

让我们说这是你的模型绑定:

$router->model('business', 'App\Business');

然后您可以在Business对象中引用FormRequest类,如下所示:

public function rules()
{
    $business = $this->route()->getParameter('business');
    // rest of the code
}

请注意,如果您在创建和更新验证时使用表单请求,则在创建记录时,业务变量将为null,因为您的对象尚不存在。因此,在引用对象属性或方法之前,请务必进行必要的检查。

答案 2 :(得分:2)

对于那些转向laravel 5的人:

public function rules()
{
    $business = $this->route('business');
    // rest of the code
}

答案 3 :(得分:1)

至少在Laravel 5.5中(未检查旧版本),一旦你做了明确的绑定(https://laravel.com/docs/5.5/routing#route-model-binding),你就可以通过$ this直接得到你的模型:

http://localhost/myapp/index.php/usuarios/login

答案 4 :(得分:0)

假设我们想要更改验证规则的情况取决于我们传入路由的type。例如:

app.dev/business/{type}

对于不同类型的业务,我们有不同的验证规则。我们需要做的就是在控制器方法上键入提示请求。

public function store(StoreBusiness $request)
{
    // The incoming request is valid...
}

对于自定义表单请求

class StoreBussiness extends FormRequest
{

    public function rules()
    {
        $type = $this->route()->parameter('type');

        $rules = [];
        if ($type === 'a') {
        }

        return rules;
    }
}

答案 5 :(得分:0)

从Laravel 5.6开始,您可以在rules方法中键入提示:

public function rules(Business $business)
{
    return [
        'name' => 'required|unique:businesses,name,'.$business->id,
        'url' => 'required|url|unique:businesses'
    ];
}

有关更多信息,请参见docs

您可以在rules方法的签名中键入所需的任何依赖项。它们将通过Laravel服务容器自动解决。