我想擺脫Auth組件錯誤消息,特別是當我嘗試訪問不允許的操作時會出現的身份驗證錯誤消息。避免CakePHP的身份驗證組件顯示身份驗證錯誤消息
只是可以肯定,我仔細檢查有沒有$this->Session->flash()
呼叫佈局的任何地方。此外,設置空值不起作用,因爲組件具有默認消息值。
我使用的驗證部件與AppController的類中的下列配置:
class AppController extends Controller {
var $components = array(
'Auth' => array(
'userModel' => 'WebUser',
'loginAction' => '/login',
'loginRedirect' => '/',
'logoutRedirect' => '/login',
'autoRedirect' => false,
),
'Session',
...
...
}
對於登錄和註銷重定向我有安裝兩條路線:
Router::connect('/', array('controller' => 'posts', 'action' => 'index'));
Router::connect('/login', array('controller' => 'web_users', 'action' => 'login'));
的登錄動作內WEBUSER控制器幾乎是空的;我只更改默認的佈局:
function login() {
$this->layout = 'login';
$this->set('title_for_layout', 'Sign in');
}
最後,我有一個非常簡單的login.ctp佈局文件:
<html>
<head>
...
</head>
<body>
...
<?php echo $content_for_layout; ?>
...
</body>
</html>
當我訪問http://example.com/login
是沒有問題的,沒有任何消息,只是登錄表單。不過,我請求任何其他操作時,系統驗證組件重定向到登錄行動剛過得到默認authError消息。出現了兩個問題:
-
爲什麼驗證組件顯示的提示信息時,有沒有(見更新2下文)$this->Session->flash()
通話地方? - 我怎樣才能設置在authError屬性的空/空值?
謝謝!
UPDATE
我想出了一個非常醜陋的解決方案:我創建了一個元素login_error.ctp並分配給驗證組件初始化的flashElement屬性:
class AppController extends Controller {
var $components = array(
'Auth' => array(
'flashElement' => 'login_error',
...
...
}
在login_error.ctp我只是與驗證錯誤默認消息:
<?php if ($message !== 'You are not authorized to access that location.'): ?>
<div id="flashMessage" class="message"><?php echo $message; ?></div>
<?php endif; ?>
它的作品,但我討厭它!
更新2
感謝dogmatic69回答我強迫自己再次檢查一切。我終於找到了致電$this->Session->flash()
的地方。這是我以前寫過的一個小視圖元素。它與登錄/註銷無關,所以我沒有注意到該文件。
UPDATE 3
由於SpawnCxy answer爲好。複製Auth組件並進行自定義修改比字符串比較更好。
什麼是顯示的確切消息? – OldWest 2011-02-09 21:16:30
在Auth組件中設置的默認值:'您無權訪問該位置。'。當然,我試圖避免覆蓋組件:) – elitalon 2011-02-09 21:21:38