首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Laravel 4验证

Laravel 4验证
EN

Stack Overflow用户
提问于 2013-05-13 16:21:58
回答 6查看 7.4K关注 0票数 6

在创建新用户时,我使用以下规则进行验证:

代码语言:javascript
运行
复制
protected $rules= [
    'name'    => 'required',
    'email'    => [
        'required',
        'unique:user',
        'email'
    ]
];

在更新现有用户时,我使用与上面所示相同的规则集,但如果用户根本不更改其电子邮件,则不希望出现验证错误。

我目前使用以下方法来解决这个问题:

代码语言:javascript
运行
复制
if (!User::changed('email')) {
    unset($user->email);
}

对我来说,这感觉像是一个肮脏的变通方法,所以我想知道是否有更好的替代方案。

还要注意,changed方法是我自己编写的。有没有人知道是否有一个原生的Laravel 4方法来检查模型属性是否发生了变化?

谢谢!

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2013-05-13 17:00:28

唯一验证规则允许忽略给定的ID,在您的示例中,该ID是您正在更新的数据集的ID。

代码语言:javascript
运行
复制
'email' => 'unique:users,email_address,10'

http://four.laravel.com/docs/validation#rule-unique

票数 9
EN

Stack Overflow用户

发布于 2013-08-06 13:01:48

一种方法是在模型中创建一个验证函数,并在控制器传入输入、场景和id (要忽略)的情况下调用它。

代码语言:javascript
运行
复制
public function validate($input, $scenario, $id = null)
{
    $rules = [];

    switch($scenario)
    {
        case 'store':
            $rules   = [
                'name'     => 'required|min:5|unique:users',
                'email'    => 'required|email|unique:users',
                'password' => 'required|min:4|confirmed'
            ];
            break;

        case 'update';
            $rules   = [
                'name'     => 'required|min:5|unique:users' .',name,' . $id,
                'email'    => 'required|email|unique:users' .',email,' . $id,
                'password' => 'min:4|confirmed'
            ];
            break;
    }

    return Validator::make($input, $rules);
}

然后在控制器中:

代码语言:javascript
运行
复制
    $input      = Input::all();
    $validation = $user->validate($input, 'update', $user->id);

    if ($validation->fails())
    {
        // Do stuff
    }
    else
    {
        // Validation passes
        // Do other stuff
    }

正如其他人提到的,唯一规则的第三个参数指定了要忽略的id。您可以添加其他用例,例如“login”以重用验证函数。

或者,Jeffrey Way在Tuts Premium has a great series of lessons in "What's New In Laravel 4",其中包括一些使用服务和侦听器处理验证的其他方法。

票数 4
EN

Stack Overflow用户

发布于 2013-05-13 17:00:46

请参阅http://four.laravel.com/docs/validation#rule-unique上的文档

您可以排除用户自己的id

代码语言:javascript
运行
复制
protected $rules= [
    'name'    => 'required',
    'email'    => [
        'required',
        'unique:user,email,THE_USERS_USER_ID',
        'email'
    ]
];
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16517606

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档