2010-06-30 44 views
14

路由:'admin'=> true vs'prefix'=>'管理員嗨,我在CakePHP中設置管理路由。CakePHP

這是我目前的路線:

Router::connect('/admin/:controller/:action/*', array('admin' => true, 'prefix' => 'admin', 'controller' => 'pages', 'action' => 'display', 'home')); 

它工作正常,但我不明白「管理員」 => true,並且「前綴」 =>「管理」之間的區別是什麼。

當我省略了'prefix' => 'admin'時,路由器不會使用admin_index,而只是使用index。那麼'admin' => true有什麼意義?

回答

26

通過設置'prefix' => 'admin'您告訴CakePHP您要爲該路由使用admin的前綴;基本上意味着你想要使用名稱前綴爲admin_的控制器操作和視圖。這部分你已經意識到了,事情可能會正常工作。

雖然時創建路由,傳遞到第二個參數的任何數組鍵不是由CakePHP的認可(即不是你平時controlleractionpluginprefix東西)的匹配路由請求期間設置爲命名參數。

因此在這種情況下添加'admin' => true只是一個命名參數,但它具有它的優點。首先,它可以使代碼更加簡潔。

/* Determine if a request came through admin routing */ 
// without: 
if ($this->params['prefix'] == 'admin') {} 
// with: 
if ($this->params['admin']) {} 

/* Create a link that is reverse-routed to an admin prefixed route */ 
// without: 
$html->link('...', array('prefix' => 'admin', 'controller' => 'users')); 
// with: 
$html->link('...', array('admin' => true, 'controller' => 'users')); 

其次,它提供的方式管理路由向後兼容於1.2 CakePHP的工作(從上面的例子中的最後一行是你將如何在1.2取得了管理路由鏈接)。因此,從1.2遷移到1.3的開發人員可以通過在其路由中保留'admin' => true標誌(並添加'prefix' => 'admin'之一)來防止在整個應用程序中更改鏈接。

最後,通過使用命名參數設置一個像這樣的自定義標誌,並在您的應用程序中使用它,而不是通過精確的字符串引用您的路線,這意味着如果您將前綴更改爲某些東西(例如從adminadministratoredit)......雖然這是一個有爭議的問題,因爲您需要重命名所有控制器操作和視圖。 :)

+0

謝謝,正是我需要的 – Rob 2010-07-02 18:30:11

4
// Go into a prefixed route. 
echo $html->link('Manage posts', array('manager' => true, 'controller' => 'posts', 'action' => 'add')); 

// leave a prefix 
echo $html->link('View Post', array('manager' => false, 'controller' => 'posts', 'action' => 'view', 5)); 
+3

在1.3中,這是處理鏈接中的前綴的正確方法。我有管理員和策展人前綴。只要做'curator'=> true或'admin'=> true即可。添加'prefix'=>'curator'什麼也不做。 – Walker 2011-07-14 14:37:08