2012-11-20 84 views
0

我不知道在CakePHP的CakePHP中做查詢或做路線的第一件事,所以我甚至不知道如何開始找到我的問題的解決方案。也許你可以幫忙。CakePHP的:MySQL查詢在路線

我希望用戶能夠去:

http://www.domain.com/movies/1 

OR

http://www.domain.com/movie-nickname 

雙方將進入 「頁」 控制器 「視圖」 行動。而且他們都應該拿出頁ID = 1

(我不希望他們乾脆去http://www.domain.com/pages/1

每一頁都有對URL的暱稱,但如果留空網址會如第一個例子所示,爲http://www.domain.com/CATEGORY/PAGE

如果暱稱不留空白,是有辦法,我可以做我的路線內的查詢,說「SELECT ID FROM網頁,綽號=‘綽號’」

在此之上,如果暱稱在頁表中是「this that」,URL應該是http://www.domain.com/this-that,這意味着連字符需要用空格代替,然後執行查詢。

我有這是第一個URL路徑:

Router::connect(
    '/:category/:page', 
    array('controller' => 'pages', 'action' => 'view'), 
    array(
     'pass' => array('page'), 
     'page' => '[0-9]+', 
     'category' => 'shows|music|games|books|hobbies' 
    ) 
); 

是我在尋找可能的第二個選項?

回答

0

我想通了,我的自定義路由。

App::uses('ClassRegistry', 'Utility'); 

// HOMEPAGE 
Router::connect('/', array('controller' => 'index', 'action' => 'index')); 

$requestURI = explode('/', $_SERVER['REQUEST_URI']); 
$scriptName = explode('/',$_SERVER['SCRIPT_NAME']); 

for($i= 0;$i < sizeof($scriptName);$i++) 
     { 
     if ($requestURI[$i]  == $scriptName[$i]) 
       { 
       unset($requestURI[$i]); 
      } 
     } 

$param = array_values($requestURI); 

$param1 = $param[0]; // domain.com/page-nickname 
$param2 = $param[1]; // domain.com/category_id/page_id 

// convert 'page-nickname' to 'page nickname' which is what it would be in db 
$pagelink = str_replace('-', ' ', $param1); 

// initiate Page mode; 
$pagesModel = ClassRegistry::init('Page'); 

// check if there is a matching page in the db that has link column like 'page nickname' 
$matchedpage = $pagesModel->find('first', array(
    'conditions' => array('Page.link LIKE' => "$pagelink"), 'recursive' => '0' 
)); 


// Cache::write('routepagelinks', $pagelinks); 

// if there is a match 
if($matchedpage['Page']['id']){ 
    Router::connect('/' . $param1, array('controller' => 'pages', 'action' => 'view', 'page' => $matchedpage['Page']['id']), array(
    'pass' => array('page'), 
    'page' => '[0-9]+' 
    )); 

// ... more custom routing if there is a match 

} 

// general routing info here 


// if no page-nickname, routes page for domain.com/category_id/page_id 
Router::connect(
'/:category/:page', 
array('controller' => 'pages', 'action' => 'view'), 
array(
    'pass' => array('page'), 
    'page' => '[0-9]+', 
    'category' => 'shows|music|games|books|hobbies' 
    ) 
); 
0

雖然有可能,你不經常看到執行這樣的邏輯路由器。更多的時候,路由器將這個傳遞給控制器​​,控制器處理解析URL路徑。

爲了證明這一點,考慮如何將本地編輯路線的工作。路由器不會爲現有的ID測試數據庫。控制器的確如此。