2017-03-01 170 views
0

我的目標是能有像產品鏈接:如何設置路由Zend框架1.12

domain.com/test-product 
domain.com/second-test-product 

代替:

domain.com/products/product/id/5 
domain.com/products/product/id/123 

信息大約每一件產品得到ProductsControllerproductAction()

它工作正常:

的ProductsController:

public function productAction() { 
    $products = new Application_Model_DbTable_Products(); 
    $nicelink = $this->_getParam('nicelink', 0); 
    $this->view->product = $products->fetchRow($products->select()->where('product_nicelink = ?', $nicelink)); 
    // nicelink is always unique 
} 

這種方法的鏈接看起來像:

for ($i=0; $i < count($this->products); $i++) { 
     echo '<a href="' .$this->baseUrl. '/' .$this->products[$i]->product_nicelink. '">LINK</a>'; 
} 

信息有關每個產品顯示在product.phtml觀點:

<?php echo $this->escape($this->product->product_name); ?> 

而且我的bootstrap.php文件:

<?php 

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { 

    protected function _initRoutes() { 

     $router = Zend_Controller_Front::getInstance()->getRouter(); 
     include APPLICATION_PATH . "/configs/routes.php"; 

     //$frontController = Zend_Controller_Front::getInstance(); 

     $route = new Zend_Controller_Router_Route_Regex(
      '(.+)', 
      array(
       'controller' => 'products', 
       'action'  => 'product' 
      ), 
      array(
       1 => 'nicelink', 
      ), 
      '%s.html' 
     ); 
     $router->addRoute('profileArchive', $route); 
    } 
} 

然而,這種解決方案有1個主要缺點:所有其他環節如

domain.com/contact 
domain.com/about-us 

不工作(可能是由於引導文件)。 如何解決問題,以使另一個鏈接工作,並保持當前的產品鏈接?

回答

1

問題是,您正在匹配產品控制器中產品操作的所有路線。可能你想繼續在zend 1中使用默認路由,它將「contact」和「about-us」匹配到默認控制器中的相應操作。

如果選中「Zend_Controller_Router_Rewrite和」功能「addDefaultRoutes()」和「路線()」,你可以看到,默認路由將任何自定義的後進行檢查。

最簡單的辦法,找對你的要求將匹配以「 - 產品」結尾的路線:

$route = new Zend_Controller_Router_Route_Regex(
     '(.+)\-product', 
     array(
      'controller' => 'products', 
      'action'  => 'product' 
     ), 
     array(
      1 => 'nicelink', 
     ), 
     '%s.html' 
    ); 

在這種情況下nicelink應該採取價值觀「測試」和「第二次測試「在你的相應例子中。

+0

但是,這是一個好主意,但每個產品網址的末尾總會有'-product'結尾,例如:domain.com/test-seo-url-product。如何擺脫這一點? – Peter