【问题标题】:Using a php variable for validation in Laravel 4.2在 Laravel 4.2 中使用 php 变量进行验证
【发布时间】:2015-12-29 07:57:33
【问题描述】:

我有这段代码可以在会话中获取一个对象并将其放入某个变量中。然后我想在 laravel 4.2 'same' 验证中使用它。到目前为止,这是我拥有的代码

        session_start();
        $getsCapt = $_SESSION["captcha"];

        $rules = array(
            'st'           => 'required',
            'capt'         => 'required|numeric|same:$getsCapt'
        );

它什么也没做。我想要的是我将从会话中获得的值与我从名为“capt”的视图中的文本框获得的值进行比较,但到目前为止它没有做任何事情。有什么想法可以正确地做到这一点吗?

【问题讨论】:

  • 如果您使用变量,请在规则周围使用双引号而不是单引号。单引号实际上是$getsCapt,而双引号是$getsCapt 的值。见manual page for Strings for more info
  • 此外,same 规则不匹配另一个字段而不是特定值吗?改用in:$getsCapt
  • 您的视图名称是capt,您正在检查什么???规则数组中的capt 是什么???

标签: laravel laravel-4 laravel-validation


【解决方案1】:

首先,您错误地使用了same验证器。

same 需要一个表单字段名称

例子:

same:field_name

其中,给定字段必须与正在验证的字段匹配。

您可以注册并使用自定义验证规则

Validator::extend('captcha', function($attribute, $value, $parameters)
{
     $captcha = \Session::get('captcha');
     return $value == $captcha;
});

所以以后你可以这样做:

    //session_start(); - Please no need for this in Laravel
    //$getsCapt = $_SESSION["captcha"]; - Also remove this not necessary

    $rules = array(
        'st'           => 'required',
        'capt'         => 'required|numeric|captcha'
    );

注意: 使用Session::put 将某些内容保存到会话中,例如\Session::put('something'); 还有Session::get 用于从会话中检索值,例如\Session::get('something');

请避免使用$_SESSION而不是Laravel的做事方式

[已编辑] 在哪里注册自定义验证规则?

基本上有两种方法可以在 Laravel 中注册自定义验证规则。

1.从闭包中解决: 如果您通过关闭解决,您可以将其添加到:app/start/global.php

Validator::extend('captcha', function($attribute, $value, $parameters)
{
     $captcha = \Session::get('captcha');
     return $value == $captcha;
});

2。从类解决 这是扩展自定义验证规则的最佳和首选方式,因为它更有条理且更易于维护。

i. 创建您自己的验证类,CustomValidator.php,可能在 app/validation 文件夹中

<?php namespace App\Validation;

use Illuminate\Validation\Validator;
use Session;

class CustomValidator extends Validator{

    public function validateCaptcha($attribute, $value, $parameters)
    {
        $captcha = Session::get('captcha');
        return $value == $captcha;
    }
}

注意:注意方法名称中使用的前缀validatevalidateCaptcha

ii.创建一个服务提供者,它将解析app/validation文件夹中的自定义验证器扩展

<?php namespace App\Validation;

use Illuminate\Support\ServiceProvider;

class CustomValidationServiceProvider extends ServiceProvider {

public function register(){}

   public function boot()
   {
        $this->app->validator->resolver(function($translator, $data, $rules, $messages){
            return new CustomValidator($translator, $data, $rules, $messages);
       });
   }

}

iii.然后在app/config/app.phpproviders数组下添加CustomValidationServiceProvider

'providers' => array(
  <!-- ... -->
  'App\Validation\CustomValidationServiceProvider'
),

iv.并在app/lang/en/validation.php中添加自定义错误信息

return array(
...
"captcha" => "Invalid :attribute entered.",
...
)

【讨论】:

  • 自定义验证器在控制器内部?
【解决方案2】:

单引号改为双引号

$rules = array(
    'st'   => 'required',
    'capt' => "required|numeric|same:$getsCapt"
);

或者简单地连接值

$rules = array(
    'st'   => 'required',
    'capt' => 'required|numeric|same:' . $getsCapt
);

【讨论】:

  • 虽然这有效地解释了$getsCapt,但它实际上并没有回答问题。
猜你喜欢
  • 2015-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-30
  • 2013-10-25
  • 1970-01-01
  • 2013-08-30
  • 1970-01-01
相关资源
最近更新 更多