【问题标题】:cakephp 3.x model validation not showing when Saving data into 2 tables将数据保存到 2 个表中时未显示 cakephp 3.x 模型验证
【发布时间】:2015-12-21 05:41:01
【问题描述】:

我有两个表员工和用户员工之间有字段 user_id 关系我们用户有一个员工和员工属于用户,我的视图文件中有以下代码

<?php 
    echo $this->Form->input('employee.name');
    echo $this->Form->input('user.email');
    echo $this->Form->input('user.username');
    echo $this->Form->input('employee.employee_level');
?>

我的 EmployeeController 代码是

<?php 

    $employee = $this->Employees->newEntity($this->request->data);
    $user = $this->Employees->Users->newEntity($this->request->data);
        if ($this->request->is('post')) {

            $employee = $this->Employees->patchEntity($employee, $this->request->data, [
                'associated' => ['Users']
            ]);

            if($this->Employees->save($employee)) {

                $this->Flash->success(__('The employee has been saved.'));

            } else {
                $this->Flash->error(__('The employee could not be saved. Please, try again.'));
            }
        }
?>

如果一切顺利且完美,它会保存数据,但如果存在一些验证错误,例如用户名已经存在或电子邮件已经存在,而不是简单地显示无法保存员工的闪存消息,请重试它不显示模型当我尝试将数据保存在单个表中时,字段下的验证错误消息如附图所示

请告诉我我的视图或控制器文件中的问题是什么,以便如果两个模型中的任何一个出现验证错误而不是在相关字段下显示错误消息

对不起我的英语不好 谢谢

【问题讨论】:

    标签: validation cakephp cakephp-3.0 cakephp-model


    【解决方案1】:

    为您的表单试试这个。您不需要提供顶级模型的名称。

    echo $this->Form->input('name');
    echo $this->Form->input('user.email');
    echo $this->Form->input('user.username');
    echo $this->Form->input('employee_level');
    

    在您的控制器中,您从不使用 $user,因此创建它没有意义,而且由于您正在使用请求数据修补员工实体,因此您不需要以相同的方式对其进行初始化。

    $employee = $this->Employees->newEntity();
    if ($this->request->is('post')) {
        $employee = $this->Employees->patchEntity($employee, $this->request->data, [
            'associated' => ['Users']
        ]);
    ...
    

    【讨论】:

    • 非常感谢它解决了我的问题你太棒了只需提到这个答案作为批准的答案我还有一个问题如果你能帮助我有很多类型字段的语法是什么,比如 php echo $this->Form->input('image.0.image');?> , Form->input('image.1.image');?> 什么是控制器代码
    • 这在the manual中有详细的介绍。
    • 非常感谢我的朋友,你能告诉我如何使用分页打印关联数据值的详细信息,例如当我使用代码 $this->paginate 时,员工表有用户 ID 和用户现在有角色 ID ($this->Employees) 比我想获得与用户表相关的角色名称,当我打印他查询并在 phpmyadmin 中运行时,它会显示详细信息,但是当我使用用户 $employee->has('user') 的代码时? $employee->user->email : "" 比它打印来自用户的电子邮件但是如何打印与此类似的角色表,谢谢
    • 您需要更改分页中的包含以便读取角色,然后它将类似于$employee-&gt;user-&gt;role-&gt;xxx。同样,这一切都在手册中得到了很好的介绍。 StackOverflow 不是来帮你研究的。
    • 我使用了相同的vode,但它总是在我的员工控制器中显示“试图获取非对象的属性”我已经定义了这个代码 $this->paginate = ['contain' => ['用户']];但是如何为此使用角色以便结果显示
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-05
    • 2012-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多