我如何在模型中获取会话? CakePHP 3.x
How I do do get session in model? CakePHP 3.x
Cakephp 3.x
我想进行验证码自定义验证。但是我无法访问会话。
$validator->notEmpty('securityCode', __('not empty message'))
->add('securityCode','custom',
['rule' => function ($value, $context) use ($extra) {
if($this->request->Session()->read('captcha') != $value) {
return false;
}
return true;
}, 'message' => 'error security code']);
return $validator;
或者我的自定义验证函数可以提供自定义参数吗?
public function validationLogin(Validator $validator, $customParameter)
{ //bla bla }
我使用:http://book.cakephp.org/3.0/en/core-libraries/validation.html#custom-validation-rules
您可以像这样将会话数据作为验证函数的参数传递
// In Controller
$sessionData = $this->request->Session()->read('captcha');
$validator = $this->{YourModel}->validationLogin(new Validator(), $sessionData);
$errors = $validator->errors($this->request->data());
if (!empty($errors)) {
// Captcha validation failed
}
// In Model
public function validationLogin(Validator $validator, $sessionData)
{
$validator
->notEmpty('securityCode', __('not empty message'))
->add('securityCode', 'custom', [
'rule' => function ($value, $context) use ($sessionData) {
if ($sessionData != $value){
return false;
}
return true;
},
'message' => 'error securty code'
]);
return $validator;
}
编辑: 您可以从模型访问会话,但这不是一个好的做法,您最好避免它。而是像上面的例子那样从控制器传递它
// In model
use Cake\Network\Session;
$session = new Session();
$sessionData = $session->read('captcha');
对于 CakePHP 3:在您的模型顶部 class 添加
use Cake\Network\Session;
并在您想要访问会话的位置添加
$this->session = new Session();
$messages = $this->session->read('captcha'); // Example for the default flash messages
要在模型中设置即显消息,请使用
$this->session = new Session();
$messages = $this->session->read('Flash.flash');
$messages[] = ['message' => 'YOUR FLASH MESSAGE', 'key' => 'flash', 'element' => 'Flash/default', 'params' => []];
$this->session->write('Flash.flash', $messages);
Cakephp 3.x
我想进行验证码自定义验证。但是我无法访问会话。
$validator->notEmpty('securityCode', __('not empty message'))
->add('securityCode','custom',
['rule' => function ($value, $context) use ($extra) {
if($this->request->Session()->read('captcha') != $value) {
return false;
}
return true;
}, 'message' => 'error security code']);
return $validator;
或者我的自定义验证函数可以提供自定义参数吗?
public function validationLogin(Validator $validator, $customParameter)
{ //bla bla }
我使用:http://book.cakephp.org/3.0/en/core-libraries/validation.html#custom-validation-rules
您可以像这样将会话数据作为验证函数的参数传递
// In Controller
$sessionData = $this->request->Session()->read('captcha');
$validator = $this->{YourModel}->validationLogin(new Validator(), $sessionData);
$errors = $validator->errors($this->request->data());
if (!empty($errors)) {
// Captcha validation failed
}
// In Model
public function validationLogin(Validator $validator, $sessionData)
{
$validator
->notEmpty('securityCode', __('not empty message'))
->add('securityCode', 'custom', [
'rule' => function ($value, $context) use ($sessionData) {
if ($sessionData != $value){
return false;
}
return true;
},
'message' => 'error securty code'
]);
return $validator;
}
编辑: 您可以从模型访问会话,但这不是一个好的做法,您最好避免它。而是像上面的例子那样从控制器传递它
// In model
use Cake\Network\Session;
$session = new Session();
$sessionData = $session->read('captcha');
对于 CakePHP 3:在您的模型顶部 class 添加
use Cake\Network\Session;
并在您想要访问会话的位置添加
$this->session = new Session();
$messages = $this->session->read('captcha'); // Example for the default flash messages
要在模型中设置即显消息,请使用
$this->session = new Session();
$messages = $this->session->read('Flash.flash');
$messages[] = ['message' => 'YOUR FLASH MESSAGE', 'key' => 'flash', 'element' => 'Flash/default', 'params' => []];
$this->session->write('Flash.flash', $messages);