【问题标题】:Call to a member function success() on boolean in CakePHP在 CakePHP 的布尔值上调用成员函数 success()
【发布时间】:2016-10-02 13:40:19
【问题描述】:

我遇到了一个对我来说没有意义的 CakePHP 3.0 问题,希望您能帮助解决。我有一个名为 users 的表名,其控制器名称相同(UsersController)。我可以毫无问题地查看表中的用户,但是当我插入、修改或删除用户时,我得到一个错误。

当我执行插入时,我收到错误消息:在第 56 行的布尔值 UsersController.php 上调用成员函数 success()

如果我查看控制器类,它看起来像

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.'));
        }
    }
    $this->set(compact('user'));
    $this->set('_serialize', ['user']);
}

第 56 行是 $this->Flash->success(__('用户已被保存。'));

从数据库中插入、更新或删除用户(取决于请求的操作)

让我困惑的是为什么代码会返回错误,最重要的是,我该如何解决这个问题?

非常感谢您的宝贵时间。

【问题讨论】:

  • 请检查src/Template/Element/Flash/,看看是否有文件名为success.ctp
  • 是的,它包含:
    = $message ?>
  • 只需从那里删除您的 php 代码并仅保留 HTML 代码。它应该可以正常工作。
  • 我已经删除了PHP代码,但初始帖子中提到的错误仍然存​​在。

标签: php cakephp


【解决方案1】:

在父类 AppController 中似乎没有加载 Flash 组件。因此,您需要手动将其添加到 AppController 或自定义控制器类,在我的情况下为 UsersController。

如果你想将它添加到父类 AppController 打开 AppController 文件并在类的一侧添加以下 PHP 代码截图。

public function initialize()
{
    $this->loadComponent('Flash');
}

如果您只想在自定义类中加载 Flash 组件,请在自定义类中添加以下代码片段。

public function initialize()
{
    parent::initialize();
    $this->loadComponent('Flash');
}

这将使您可以使用 Flash 组件,并消除了最初帖子中描述的错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-25
    • 1970-01-01
    • 2021-05-23
    • 2018-12-17
    • 2018-10-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多