在Laravel 4.2中使用php变量进行验证

时间:2015-10-01 09:54:50

标签: laravel laravel-4 laravel-validation

我有这个代码在会话中获取一个对象,我把它放在一个特定的变量中。然后我想在laravel 4.2'相同的'中使用它。验证。到目前为止,这是我的代码

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

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

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

2 个答案:

答案 0 :(得分:2)

首先,您错误地使用了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'
    );

NB: 使用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;
    }
}

NB:请注意方法名称validate

中使用的前缀validateCaptcha

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。然后在CustomValidationServiceProvider提供商数组下添加app/config/app.php

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

iv。并在app/lang/en/validation.php

中添加自定义错误消息
return array(
...
"captcha" => "Invalid :attribute entered.",
...
)

答案 1 :(得分:-2)

将单引号更改为双引号

\.

或者简单地连接值

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