关于多个rule 我们在Request 里面怎么识别是那个function 请求的呢?

https://laravist.com/series/laravel-5-basic/episodes/12

如上述教程里面讲的。

视频在播放到8:33 的时候讲述得到 多个请求都走同一个 rule 的时候。但是……对于我们小白还是不知道……我看了好久的 http://laravel.com/docs/5.1/validation#rule-array

也没看到多个的时候怎么处理……

public function rules()
 {
 //更新数据的时候我想反悔如下
     return [
         'tel' => "required|digits:11",
         'email' => 'email'
     ];
 //新增的时候我就走这的rule 规则
     return [
         'username' => 'required|unique:system_user,username',
         'email' => 'required|unique:system_user,email',
         'tel' => "required|digits:11",
         'email' => 'email'
     ];
 }

创建的 Route 是 /user/create

更新的 Route 是 /user/update

请问怎么识别?

补充一个问题。
如我想除本身id以外的数据才执行email唯一更新怎么弄?
我按照官方的文档弄的是这样的。

'email' => 'email|unique:user,email,'.\Auth::user()->id

我打印了一下数据是这样的

"email|unique:user,email,563496beab600d5237124848"

数据也是没问题的。
但是呢老提示……
email重复了。啥情况?

上问题答案:::::

感谢 @justtest 的处理

因为我安装的是mongodb 所以我的主键是 _id,而laravel 默认的主键的就是

 protected function getUniqueIds($parameters)
 {
 //********看到没他的如果没给定主键的话,他就是id了。而我没有id字段
     $idColumn = isset($parameters[3]) ? $parameters[3] : 'id';

     return [$idColumn, $parameters[2]];
 }

所以我们得改一下代码加上自定义字段

'email' => 'email|unique:user,email,'.\Auth::user()->id.',_id',

这样就大功告成了!!!再次感谢

你的意图,会潜在的导致用户在 update 的时候,把 username 、email 等数据清空。

public function rules()
{
    $routename  = \Route::currentRouteName();
    if ($routename === 'xxx.xx') {
        return [
        ];
    } elseif ($routename === 'yyyy.yy') {
    }
}
// 至于 routename 默认值是什么,你在各自方法中打印下看看。
justtest

你的意图,会潜在的导致用户在 update 的时候,把 username 、email 等数据清空。

public function rules()
{
    $routename  = \Route::currentRouteName();
    if ($routename === 'xxx.xx') {
        return [
        ];
    } elseif ($routename === 'yyyy.yy') {
    }
}
// 至于 routename 默认值是什么,你在各自方法中打印下看看。
JellyBool

跟上面差不多吧,大概就是这样

 public function rules()
    {
        $rules = [
            'tel' => 'required|digits:11',
            'email' => 'email'
        ];
        if($routename === 'xxx.xx'){
            $rules['username'] = 'required|unique:system_user,username';
        }
       
        return $rules;
     
    }
woailuosj

@JellyBool

  1. 我没找到\Route::currentRouteName();方法,用了就只显示null
  2. 我想知道在 resource 路由里面对于update我怎么写 $routename === 'xxx.xx',比如 用的resource('info', 'xxx')
  3. 在if方法里的验证规则是要除了当前的一条记录,去跟其他记录做唯一性判断,现在我在路由为update的if里去除unique,我担心新建的时候它判断了唯一性,那更改的时候不做判断的话那不就会产生重复吗?
    劳烦,谢谢
JellyBool

你可以直接

$routename  = \Route::currentRouteName();

justtest已经说明 至于 routename 默认值是什么,你在各自方法中打印下看看

在你的update方法里面dd($routename)应该就知道了。

你是判断什么字段的唯一性?比如laravist的用户名这种,我在更新的时候直接就不允许修改了,你的具体是什么应用场景? @woailuosj

woailuosj

@JellyBool
1.很奇怪,我用dd()打印$routename = \Route::currentRouteName();出来是null

  1. 我是要做个用户详细信息记录的东西,然后在里面要进行 手机号和身份证号的唯一性判断,现在就是在新建的时候判断肯定没问题的,但是在编辑更改的时候,手机号和身份证号也是可以更改的,所以我依旧需要去判断是不是会和表中的其它记录重复了手机号或者身份证号
woailuosj

发现有了新的提示,这个是什么插件?

JellyBool

我觉得你至少可以参照这一行:

'email' => 'email|unique:user,email,'.\Auth::user()->id

这里默认的是id位users这张表的主键,然后身份证和手机的信息为users这张表的字段:

  public function rules()
    {
        $user = User::find($this->users);
        switch($this->method())
        {
            case 'GET':
            case 'DELETE':
            {
                return [];
            }
            case 'POST':
            {
                return [
                    'phone'   => 'required|email|unique:users,phone',
                ];
            }
            case 'PUT':
            case 'PATCH':
            {
                return [
                    'phone'      => 'required|email|unique:users,phone,'.$user->id,
                ];
            }
            default:break;
        }
    }
}

大概你也可以试试这样,不知道满足你的需求没有。。。 @woailuosj