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

Using a php variable for validation in Laravel 4.2

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

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

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

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

将单引号改为双引号

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

或者简单地连接值

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

首先,您错误地使用了 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。从 class 解析 这是扩展自定义验证规则的最佳和首选方式,因为它更有条理且更易于维护。

i. 创建您自己的验证 class、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.php providers 数组下添加 CustomValidationServiceProvider:

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

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

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