【问题标题】:Laravel validate modelLaravel 验证模型
【发布时间】:2013-08-27 07:31:20
【问题描述】:

我在我的 Laravel 4 应用程序中创建了一个 Employer 模型,并在 Employer.php 中创建了以下函数来验证用户输入,然后再将其保存到数据库:

public static function validate($input)
{
    $validator = Validator::make($input, static::$rules);

    if ($validator->fails() {
        return $validator;
    }

    return true;
}

当我在数据库中创建新记录时,这可以正常工作,因为我正在为我指定特定字段的所有规则传递值。

但是,数据库中的某些字段在创建后我不希望用户对其进行编辑(例如,business_name)。在控制器的编辑方法中,我创建了一个表单并从表单中省略了这些字段。但验证失败,因为$rules 需要business_name

作为临时解决方法,我尝试在编辑表单中创建一个隐藏字段并使用business_name 填充它。但是,这也必须是唯一的,并且当我将表单修补到 update 方法时会失败!

有什么建议吗?有什么方法可以根据调用它的方法指定应该应用哪些验证规则?或者我应该在Employer.php 中创建一个新方法专门用于验证更新方法?

【问题讨论】:

    标签: php forms validation model laravel-4


    【解决方案1】:

    您可以使用required_without 验证规则。由于新实例化的模型还没有 id 字段,因此只有在 id 不存在时才需要一些字段。这应该有效:

    public static $rules = array(
        'business_name' => 'required_without:id'
    );
    

    http://laravel.com/docs/validation#rule-required-without

    【讨论】:

    • 谢谢 - 还有其他选择吗?我可能正在考虑一种情况,我可能希望为可能具有大量字段的模型提供单独的编辑表单,而不是它们都在一个页面上。或者这被认为是不好的做法?
    • 在这种情况下,您可能希望为每个表单定义多个规则集,并在您的 validate 方法中相应地使用它们。但是,如果有很多字段,您应该能够将其中一些分组为子集并将它们用作单独的实体。
    猜你喜欢
    • 2013-10-07
    • 2016-09-11
    • 2014-06-26
    • 2019-04-21
    • 1970-01-01
    • 1970-01-01
    • 2022-12-16
    • 2020-02-07
    • 1970-01-01
    相关资源
    最近更新 更多