我有这个代码在会话中获取一个对象,我把它放在一个特定的变量中。然后我想在laravel 4.2'相同的'中使用它。验证。到目前为止,这是我的代码
session_start();
$getsCapt = $_SESSION["captcha"];
$rules = array(
'st' => 'required',
'capt' => 'required|numeric|same:$getsCapt'
);
它没有做任何事情。我想要的是将我从会话中获得的价值与我从名为' capt'的视图中的文本框中得到的值进行比较。但到目前为止它没有做任何事情。有什么想法可以做到这一点吗?
答案 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"
);