我在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);
}
}
和我的模型表:
// 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');
}
}
关于如何在用户注册上应用验证的想法?
谢谢
答案 0 :(得分:2)
您必须将名称空间添加到您的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');
}
}
答案 1 :(得分:0)
patchEntity将首先验证您的数据,然后才返回Entity对象
来源:https://book.cakephp.org/3.0/en/orm/saving-data.html#validation-and-patchentity