【问题标题】:Cakephp 3.x update a record without formCakephp 3.x 更新无表单记录
【发布时间】:2016-01-27 13:52:14
【问题描述】:

在我的users/index 页面中,我基本上通过执行以下操作列出了users 表中的每个用户:

    <?php foreach ($users as $user): ?>
    <tr>
        <td><?= h($user->name) ?></td>
        <td><?= h($user->email) ?></td>
        <td><?= h($user->phone_nr) ?></td>
        <td><?= h($user->role)?></td>
    </tr>
    <?php endforeach; ?>

User.role 字段是 enum 类型,有两个选择:'user''admin'

我需要有一个下拉菜单才能立即更改它,而不是仅仅列出用户的角色。所以基本上我需要这样的东西:

echo $this->Form->input('role', ['type' => 'select','label' => 'Role', 'options' => ['user' => 'user', 'admin' => 'admin']]);

但是,它在表单之外不起作用,并且表格显然不是表单。

非常感谢任何有关如何解决的帮助或指导。

编辑

根据要求,我提供了用于保存用户数据的代码 sn-p(如果从表单中保存):

public function add()
{
    $user = $this->Users->newEntity();
    if ($this->request->is('post')) {
        $user = $this->Users->patchEntity($user, $this->request->data);

        if ($this->Users->save($user)) {             
            $this->Flash->success(__('The user has been saved.'));
            return $this->redirect(['action' => 'index']);
        } else {
            $this->Flash->error(__('The user could not be saved. Please, try again.'));
        }
    }
}

【问题讨论】:

  • 显示保存记录的代码可能是个好主意...
  • 非常感谢您的评论。我已经更新了问题。
  • 代码只是烘焙代码。您完全知道如何使用实体对象并在其上设置数据吗?你应该先学习教程book.cakephp.org/3.0/en/tutorials-and-examples.html他们会教你基础知识。
  • 谢谢,但我真的知道基础知识。我只需要动态更新我在任何教程中都找不到的表单之外的记录。
  • WpDoe - 啊,所以你问的是 4 个问题。我认为这就是问题所在。尝试将其分解为诸如“如何在不使用表单的情况下将数据从视图获取到控制器?”之类的问题。和/或“我如何访问控制器中未通过表单提交的数据?”...等。问题是,现在你在问如何做整个事情,这听起来像是一个为你编写代码的请求。

标签: cakephp cakephp-3.0


【解决方案1】:

一种非常简单的方法可能如下所述。它没有使用 Ajax,只是一个简单的 POST 请求,这意味着当角色更改时页面会重新加载。

如下修改你的视图:

<?php foreach ($users as $user): ?>
<tr>
    <td><?= h($user->name) ?></td>
    <td><?= h($user->email) ?></td>
    <td><?= h($user->phone_nr) ?></td>
    <td><?= h($user->role)?></td>
    <td>
        <?= $this->Form->postButton('Toggle Role',
            ['controller'=>'users','action'=>'toggle_role',$user->id,$user->role])?>
    </td>
</tr>
<?php endforeach; ?>

向你的控制器添加一个动作:

public function toggle_role($id,$existing_role){

    $users = TableRegistry::get('Users');
    $user = $users->get($id);
    $user->role = ($existing_role == 'admin')?'user':'admin';
    $users->save($user);
    return $this->redirect($this->referer());
}

注意:代码未经测试,缺乏错误处理

【讨论】:

    猜你喜欢
    • 2016-04-28
    • 1970-01-01
    • 1970-01-01
    • 2015-06-27
    • 2020-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多