2011-11-04 93 views
1

我在玩幾個前綴在現有的CakePHP應用程序。我在佈局中也有一些指向共享方法的主導航。我知道我可以明確地將每個前綴設置爲false以避免與前綴鏈接,但是有沒有一個快捷方式路徑,它告訴Cake沒有使用任何前綴,無論當前存在哪個上下文?清除所有前綴

例如,我是一個網頁,一個房地產經紀人可以註冊(/realtor/users/register)上。我對檢查員和承包商有類似的前綴,因爲註冊過程稍有不同。由於我沒有經過認證,有在主導航一個登錄鏈接,但登錄操作是由用戶的所有類型的共享,並應無任何前綴進行訪問。

<?php echo $this->Html->link('Login', array('controller' => 'users', 'action' => 'login', 'realtor' => false, 'inspector' => false, 'contractor' => false)) ?> 

我希望能夠在鏈接中關閉所有的前綴,而不是單獨關閉每個可能的前綴。可能?

+0

可能有一個輔助方法。你使用Configure :: write('Routing.prefixes')來定義它們嗎? – mark

+0

是的,前綴是使用routing.prefixes定義的。 –

回答

1

如果丟失的路由功能是不是對你的問題,你可以傳遞一個字符串,而不是一個陣列來的鏈接()方法:

<?php 
echo $this->Html->link('Login', '/users/login'); 
?> 

編輯

爲了保持路由機制,這裏有一個小助手會這樣做:

class MyHtmlHelper extends HtmlHelper 
{ 
    public function link($title, $url = null, $options = array(), $confirmMessage = false) 
    { 
     $prefixes = Router::prefixes(); 

     foreach($prefixes as $prefix) 
     { 
      $url[$prefix] = false; 
     } 

     return parent::link($title, $url, $options, $confirmMessage); 
    } 
} 

如果你想保留,你可以改變方法名稱標準的link()方法。我Cake2測試這一點,但是這應該與Cake1.3

+0

是的,我真的不想失去路由。 –

+0

OK,我編輯我的回答與可能會滿足您的需求 – nIcO

+0

我somethink類似的例子幫手。你的解決方案看起來更短,更容易,我不得不承認。提示:稱之爲defaultLink() - 那就是我所謂的我的 – mark

4

工作,我知道它過2次年以來上述問題得到回答,但我想我發現了一個更小侵入性的方式來完成你想要的東西。
$this->params取當前前綴值,並將其設置爲false,像這樣

$this->Html->link('hello', array($this->params['prefix']=>false, 'controller'=>'posts','action'=>'index')); 

$this->params['prefix']值將是一個和有關在那一刻設置爲false動態設置前綴名。

歡呼聲