【发布时间】:2018-07-10 13:42:14
【问题描述】:
我在 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');
}
}
关于如何对用户注册应用验证的想法?
谢谢
【问题讨论】:
-
乍一看,这一切看起来都不错。当你运行这个时你会得到什么结果?如果你在
patchEntity调用之后debug($user);,你会得到什么? -
除了与表单相关的数据我什么都不是,没有错误... src\Controller\UsersController.php (line 13) object(Cake\ORM\Entity) { 'email' => ' ', 'username' => '', 'lastname' => '', 'firstname' => '', 'password' => '', 'type' => '', '[new]' => true , '[accessible]' => [ '*' => true ], '[dirty]' => [ 'email' => true, 'username' => true, 'lastname' => true, 'firstname' = > true, 'password' => true, 'type' => true ], '[original]' => [], '[virtual]' => [], '[errors]' => [], '[无效]' => [], '[存储库]' => '用户'
标签: php cakephp cakephp-3.0