在 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;
}
}
注意: 注意方法名称中使用的前缀 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. 然后在 app/config/app.php
providers 数组下添加 CustomValidationServiceProvider
:
'providers' => array(
<!-- ... -->
'App\Validation\CustomValidationServiceProvider'
),
iv. 并在 app/lang/en/validation.php
中添加自定义错误信息
return array(
...
"captcha" => "Invalid :attribute entered.",
...
)
我有这段代码可以在会话中获取一个对象,并将它放在某个变量中。然后我想在 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;
}
}
注意: 注意方法名称中使用的前缀 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. 然后在 app/config/app.php
providers 数组下添加 CustomValidationServiceProvider
:
'providers' => array(
<!-- ... -->
'App\Validation\CustomValidationServiceProvider'
),
iv. 并在 app/lang/en/validation.php
return array(
...
"captcha" => "Invalid :attribute entered.",
...
)