将CakePHP从2.6.2更新到2.7.2后,创建auth flash消息时出现缺少键错误。如何为默认authError
?
由于SessionComponent::setFlash()
已deprecated,我在app/Controller/AppController.php
添加了FlashComponent并修改了此消息中的所有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.ctp
来
App/View/Elements/Flash/succeed.ctp
这是有效的 - 但如果我未登录并尝试访问管理页面,我会收到{{1}中定义的默认authError消息显示没有相应模板。在调试模式2下,我收到以下错误:
app/Controller/AppController.php
AppController.php需要进行哪些更改才能获得使用我自己的元素模板呈现的默认authError" auth"?
这里是AppController.php的一部分:
// 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">
将所有控制器中的所有闪存消息更改为Flash组件和帮助程序时,这两行仍然是必需的吗? CakePHP还在哪里使用它们?
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'),
)
);
我还看了Authentication tutorial。但它似乎不是最新的,因为echo $this->Session->flash();
echo $this->Session->flash('auth');
仍在大量使用......
答案 0 :(得分:1)
添加类似
的内容'Auth' = [
...
'flash' => ['element' => 'auth_error'],
...
]
然后在auth_error.ctp
目录中创建名为Element/Flash
的模板。在此文件中,您使用的唯一变量应为$message
,因为当从Auth组件调用Flash时,不会传递任何其他变量(即$key
变量)
也许这个答案不是100%正确(所以任何建议都是受欢迎的)但它对我有用。
答案 1 :(得分:0)
这是Cake本身的一个错误,它将(将会)修复为2.7.4
答案 2 :(得分:0)
只需添加Flash组件即可。
class AppController extends Controller {
public $components = array('DebugKit.Toolbar','Flash');
}
答案 3 :(得分:0)
我也遇到了同样的问题,这肯定会解决你的问题。请在 app / Controller / AppController.php 中添加以下代码行:
public $components = array('Flash');