Cakephp 验证不起作用
Cakephp validation does not work
我在 Cakephp 3.6
下进行表单验证时遇到问题
在旧版本的 CakePHP 上验证没有问题,但是无法通过模型验证我的表单。
我按照不同站点的教程,在论坛上查看,任何解决方案均无效。
如果我没记错的话,在我看来,在 CakePHP 3 的第一个版本中,验证是在保存时进行的,即使没有输入数据,我的保存也没有任何价值。 ..
我的看法:
//src/Template/Users/Register.ctp
<div class="wrapper">
<div id="register-box">
<div class="form-register">
<h2 class="title">Inscription</h2>
<?php
echo $this->Form->create();
echo $this->Form->control('email',[
'label' => false,
'placeholder' => 'Adresse email',
'class' => 'form-control',
//'required' => true
]);
echo $this->Form->control('username',[
'label' => false,
'placeholder' => 'Nom d\'utilisateur',
'class' => 'form-control',
]);
echo '<div class="form-group">';
echo $this->Form->control('lastname',[
'label' => false,
'placeholder' => 'Nom',
'class' => 'form-control w-50',
]);
echo $this->Form->control('firstname',[
'label' => false,
'placeholder' => 'Prénom',
'class' => 'form-control w-50',
]);
echo '</div>';
echo $this->Form->control('password',[
'label' => false,
'placeholder' => 'Mot de passe',
'class' => 'form-control',
]);
echo $this->Form->select('type',
[
1 => 'Prestataire',
2 => 'Client'
],
[
'empty' => 'Quel type de compte ?',
'class' => 'form-control',
]);
echo $this->Form->button('Suivant', ['class' => 'btn btn-red']);
echo $this->Form->end();
?>
</div>
</div>
</div>
我的控制器:
//src/Controller/UsersController.php
<?php
namespace App\Controller;
use App\Controller\AppController;
use Cake\Validation\Validator;
class UsersController extends AppController {
public function register() {
$user = $this->Users->newEntity();
if($this->request->is('post')) {
$user = $this->Users->patchEntity($user, $this->request->getData());
if($this->Users->save($user)) {
echo "ok";
} else {
echo "KO";
}
}
$this->set('user', $user);
}
}
和我的模特Table:
//src/Model/Table/UsersTable.php
<?php
use Cake\ORM\Table;
use Cake\Validation\Validator;
class UsersTable extends Table {
public function initialize(array $config) {
$this->addBehavior('Timestamp');
}
public function validationDefault(Validator $validator)
{
return $validator
->notEmpty('username', "Un nom d'utilisateur est nécessaire")
->notEmpty('password', 'Un mot de passe est nécessaire');
}
}
关于如何对用户注册应用验证的想法?
谢谢
patchEntity 将首先验证您的数据,然后才是 return 实体对象
来源:https://book.cakephp.org/3.0/en/orm/saving-data.html#validation-and-patchentity
您必须将命名空间添加到您的 UsersTable
<?php
namespace App\Model\Table; /// <<< add this line
use Cake\ORM\Table;
use Cake\Validation\Validator;
class UsersTable extends Table
{
public function initialize(array $config)
{
$this->addBehavior('Timestamp');
}
public function validationDefault(Validator $validator)
{
return $validator
->notEmpty('username', "Un nom d'utilisateur est nécessaire")
->notEmpty('password', 'Un mot de passe est nécessaire');
}
}
我在 Cakephp 3.6
下进行表单验证时遇到问题在旧版本的 CakePHP 上验证没有问题,但是无法通过模型验证我的表单。 我按照不同站点的教程,在论坛上查看,任何解决方案均无效。 如果我没记错的话,在我看来,在 CakePHP 3 的第一个版本中,验证是在保存时进行的,即使没有输入数据,我的保存也没有任何价值。 ..
我的看法:
//src/Template/Users/Register.ctp
<div class="wrapper">
<div id="register-box">
<div class="form-register">
<h2 class="title">Inscription</h2>
<?php
echo $this->Form->create();
echo $this->Form->control('email',[
'label' => false,
'placeholder' => 'Adresse email',
'class' => 'form-control',
//'required' => true
]);
echo $this->Form->control('username',[
'label' => false,
'placeholder' => 'Nom d\'utilisateur',
'class' => 'form-control',
]);
echo '<div class="form-group">';
echo $this->Form->control('lastname',[
'label' => false,
'placeholder' => 'Nom',
'class' => 'form-control w-50',
]);
echo $this->Form->control('firstname',[
'label' => false,
'placeholder' => 'Prénom',
'class' => 'form-control w-50',
]);
echo '</div>';
echo $this->Form->control('password',[
'label' => false,
'placeholder' => 'Mot de passe',
'class' => 'form-control',
]);
echo $this->Form->select('type',
[
1 => 'Prestataire',
2 => 'Client'
],
[
'empty' => 'Quel type de compte ?',
'class' => 'form-control',
]);
echo $this->Form->button('Suivant', ['class' => 'btn btn-red']);
echo $this->Form->end();
?>
</div>
</div>
</div>
我的控制器:
//src/Controller/UsersController.php
<?php
namespace App\Controller;
use App\Controller\AppController;
use Cake\Validation\Validator;
class UsersController extends AppController {
public function register() {
$user = $this->Users->newEntity();
if($this->request->is('post')) {
$user = $this->Users->patchEntity($user, $this->request->getData());
if($this->Users->save($user)) {
echo "ok";
} else {
echo "KO";
}
}
$this->set('user', $user);
}
}
和我的模特Table:
//src/Model/Table/UsersTable.php
<?php
use Cake\ORM\Table;
use Cake\Validation\Validator;
class UsersTable extends Table {
public function initialize(array $config) {
$this->addBehavior('Timestamp');
}
public function validationDefault(Validator $validator)
{
return $validator
->notEmpty('username', "Un nom d'utilisateur est nécessaire")
->notEmpty('password', 'Un mot de passe est nécessaire');
}
}
关于如何对用户注册应用验证的想法?
谢谢
patchEntity 将首先验证您的数据,然后才是 return 实体对象
来源:https://book.cakephp.org/3.0/en/orm/saving-data.html#validation-and-patchentity
您必须将命名空间添加到您的 UsersTable
<?php
namespace App\Model\Table; /// <<< add this line
use Cake\ORM\Table;
use Cake\Validation\Validator;
class UsersTable extends Table
{
public function initialize(array $config)
{
$this->addBehavior('Timestamp');
}
public function validationDefault(Validator $validator)
{
return $validator
->notEmpty('username', "Un nom d'utilisateur est nécessaire")
->notEmpty('password', 'Un mot de passe est nécessaire');
}
}