gpt4 book ai didi

cakephp - 如何为一般 authError 消息定义 FlashHelper/Component 元素

转载 作者:行者123 更新时间:2023-12-02 03:22:56 25 4
gpt4 key购买 nike

将 CakePHP 从 2.6.2 更新到 2.7.2 后,我在创建 auth flash 消息时遇到了缺少 key 的错误。如何为默认的 authError 定义元素模板?

因为 SessionComponent::setFlash() 已经是 deprecated我添加了 FlashComponentapp/Controller/AppController.php 中修改所有 Flash 消息:

// Controller
$this->Session->setFlash('Done', 'succeed');
$this->Session->setFlash('There is an error', 'failure');
$this->Session->setFlash('Please log in', 'auth');
// View (default Layout)
echo $this->Session->flash();
echo $this->Session->flash('auth');

为此:

// Controller
$this->Flash->succeed('Done');
$this->Flash->failure('There is an error');
$this->Flash->auth('Please log in');
// View (default Layout)
echo $this->Flash->render();
echo $this->Session->flash(); // keep temporarily?
echo $this->Session->flash('auth'); // keep temporarily?

我还复制了flash相关的模板App/View/Elements/succeed.ctpApp/View/Elements/Flash/succeed.ctp

这是可行的 – 但是如果我未登录并尝试访问管理页面,我会得到默认的 authError app/Controller/AppController.php 中定义的消息显示没有相应的模板。使用 Debug模式 2,我收到以下错误:

// Undefined variable: key [CORE\Cake\View\Elements\Flash\default.ctp, line 1]
// include - CORE\Cake\View\Elements\Flash\default.ctp, line 1
// View::_evaluate() - CORE\Cake\View\View.php, line 971
// View::_render() - CORE\Cake\View\View.php, line 933
// View::_renderElement() - CORE\Cake\View\View.php, line 1227
// View::element() - CORE\Cake\View\View.php, line 418
// SessionHelper::flash() - CORE\Cake\View\Helper\SessionHelper.php, line 159
// include - APP\View\Layouts\default.ctp, line 142
// View::_evaluate() - CORE\Cake\View\View.php, line 971
// View::_render() - CORE\Cake\View\View.php, line 933
// View::renderLayout() - CORE\Cake\View\View.php, line 546
// View::render() - CORE\Cake\View\View.php, line 481
// Controller::render() - CORE\Cake\Controller\Controller.php, line 960
// Dispatcher::_invoke() - CORE\Cake\Routing\Dispatcher.php, line 200
// Dispatcher::dispatch() - CORE\Cake\Routing\Dispatcher.php, line 167
// [main] - APP\webroot\index.php, line 118
// Message" class="message">

为了使用我自己的元素模板“auth”渲染默认的 authError,需要对 AppController.php 进行哪些更改?

这里是 AppController.php 的一部分:

public $components = array(
'Flash',
'Session',
'Security',
'Auth' => array(
'authenticate' => array('Form' => array('passwordHasher' => 'Blowfish')),
'authError' => 'My default auth error message.', // How do I have to modify this line?
'loginAction' => array('controller' => 'users', 'action' => 'login'),
'loginRedirect' => array('controller' => 'users', 'action' => 'welcome'),
'logoutRedirect' => array('controller' => 'users', 'action' => 'goodbye'),
)
);

当将所有 Controller 中的所有 flash 消息更改为 Flash 组件和助手时,这两行是否仍然需要? CakePHP 在其他什么地方使用它们?

echo $this->Session->flash();
echo $this->Session->flash('auth');

我还查看了 Authentication tutorial .但它似乎不是最新的,因为 $this->Session->setFlash() 仍在大量使用......

最佳答案

在您的 Auth 组件设置数组中添加类似的内容

'Auth' = [
...
'flash' => ['element' => 'auth_error'],
...
]

然后在您的 Element/Flash 目录中创建一个名为 auth_error.ctp 的模板。在此文件中,您使用的唯一变量应该是 $message,因为当 cake 从 Auth 组件调用 Flash 时,不会传递任何其他变量(即 $key 变量)

也许这个答案不是 100% 正确(所以欢迎任何建议)但它对我有用。

关于cakephp - 如何为一般 authError 消息定义 FlashHelper/Component 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32041587/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com