validation - 验证消息未显示在 cakephp 3 最新版本中的字段下方
问题描述
我正在尝试验证已应用 jquery 的多选字段。
验证工作正常,但唯一的问题是验证消息未显示在输入字段下方。
这是我的文件。
profile_edit.ctp
<?php echo $this->Form->create($user,['action' => '', 'role'=>"form",'novalidate'=>true,'method'=>'post','id'=>'ProfileForm','templates'=>['label'=>false,'inputContainer'=>'{{content}}']]); ?>
<?php echo $this->Form->control('user_grades[].grade_id',['multiple','hiddenField'=>false, 'escape'=>false, 'type'=>'select', 'id'=>'sp_grade', 'options'=>App\Model\Table\GradesTable::getGrades('list'),'class'=>'form-control chosen-select']); ?>
<button type="submit" class="btn footer_btns float-left">Save</button>
<?php echo $this->Form->end(); ?>
MyAccountController.php
<?php
public function profileEdit(){
$user = $this->Users->get($this->Auth->user('id'), ['contain'=>['UserGrades']]);
if($this->request->is(['put','post'])){
$data = $this->request->getData();
if(isset($data['user_grades']) && !empty($data['user_grades'])) {
$this->UserGrades->deleteAll(['user_id' => $this->Auth->user('id')]);
}
if(null == $this->request->getData('user_grades')){
$this->request = $this->request->withData('user_grades.0.grade_id','');
}
$user = $this->Users->patchEntity($user, $this->request->getData(), [
'validate' => 'editProfileSection',
'associated' => [
'UserGrades' => ['validate'=> 'editProfileSection']
]
]);
if(empty($user->getErrors())){
if ($this->Users->save($user)) {
$this->Flash->success(__('Succesfully updated <strong>'.$user->full_name .'</strong> Information||Success'));
return $this->redirect(['action' => '']);
}
}
$this->Flash->error(__('Please check your inputs and try again.||Action Failed!'));
}
$this->set(compact('user'));
}
用户等级表.php
<?php
namespace App\Model\Table;
use Cake\ORM\Table;
use Cake\ORM\Query;
use Cake\ORM\TableRegistry;
use Cake\Event\Event;
use Cake\ORM\RulesChecker;
use Cake\Validation\Validator;
class UserGradesTable extends Table {
public function initialize(array $config) {
$this->addBehavior('Timestamp');
$this->addBehavior('Trim');
}
public function validationEditProfileSection(Validator $validator) {
$validator
->notEmpty('grade_id',"Please select at least one grade.");
return $validator;
}
}
我试图收到错误消息并得到以下信息:
Array
(
[user_grades] => Array
(
[0] => Array
(
[grade_id] => Array
(
[_empty] => Please select at least one grade.
)
)
)
)
但是此错误未显示在输入字段下方。任何帮助将不胜感激。
解决方案
您没有为表单控件使用正确的命名方案,您不能使用[]
,如果您希望表单助手魔法起作用,那么您必须提供实际索引,即:
user_grades.0.grade_id
推荐阅读
- javascript - Vue用空单元格排序导致不同的结果
- arrays - 循环遍历数组并更改其属性时获取不是可变错误
- php - Yii2 - 以不同格式保存和显示日期时间
- html - 写 `<` 而不是 `<` 有缺点吗
- php - 从 php + $_GET 友好 url + cURL 问题运行 .htaccess
- r - 更新并行 R 线程内的全局变量
- botframework - 开始意外删除 Bot Framework Account
- swift - 嵌套字典上的 Swift Codable 崩溃
- php - Wordpress 在编辑帖子页面保存,更新帖子元
- elasticsearch - Elasticsearch - 查询超过 10k 的数据