2013-08-05 3 views
1

привет есть problemn с Zend Framework 2 я хочу создать базу данных маршрутизации, напримеррамки Зенд 2 + База данных маршрутизации

/hello/index => is Application/Controllers/HomeController 
/CustomURL => is Application/Controllers/HomeController 

CustomUrl я извлечь из базы данных я вот мой конфигурационный файл

/// module.config.php 
'router' => array(
    'routes' => array(
    ..... 
    'node' => array(
      'type' => 'Application\Router\Page',//src/Application/Router/Page.php 
      'options' => array(
       'route' => '/node', 
       'defaults' => array(
        'controller' => 'Application\Controller\Index', 
        'action'  => 'index', 
       ), 
      ), 
     ), 
     ), 
    ),.... 

вот мой класс маршрутизатор

namespace Application\Router; 
use Zend\Mvc\Router\Exception; 
use Zend\Stdlib\ArrayUtils; 
use Zend\Stdlib\RequestInterface as Request; 
use Zend\Mvc\Router\Http; 
use Zend\Mvc\Router\Http\Literal; 

class Page extends Literal 
{ 

    protected $routePluginManager = null; 
    protected $defaults = array(); 

    public function match(Request $request, $pathOffset = null) 
    { 
     $uri = $request->getUri(); 
     $path = $uri->getPath(); 

     //sample logic here 
     //for /about/gallery uri set node id to 1 
     //todo: get action, controller and module from navigation   
     if($path == '/node'){ 
      $uri->setPath('/node/1'); 
      $request->setUri($uri); 

     } 


     return parent::match($request, $pathOffset); 

    } 
    protected function buildPath(array $parts, array $mergedParams, $isOptional, $hasChild) 
    { 

    if(isset($mergedParams['link'])) 
    { 
     return $mergedParams['link']; 
    } 

    return parent::buildPath($parts, $mergedParams, $isOptional, $hasChild); 
    } 
} 

им очень нуб и мне нужна помощь для этой части сделано благодаря

* обновление * я хочу некоторые понравившиеся сообщения Tutorials For Database-Driven Routing in Zend Framework?

+0

Я действительно не ясно понять, что вы спросили, что я предполагаю, что вы пытаетесь создать маршрутизации так что если он не соответствует вашему маршруту «/ node», он должен перенаправить на некоторую страницу XYZ? –

+0

да, я хочу создать маршрутизацию, но по базе данных – user2646690

ответ

1

Мой маршрутизатор выглядит следующим образом:

class Content implements RouteInterface,ServiceLocatorAwareInterface 
{ 
protected $defaults = array(); 
protected $routerPluginManager = null; 

public function __construct(array $defaults = array()) 
{ 
    $this->defaults = $defaults; 
} 

public function setServiceLocator(ServiceLocatorInterface $routerPluginManager) 
{ 
    $this->routerPluginManager = $routerPluginManager; 
} 

public function getServiceLocator() 
{ 
    return $this->routerPluginManager; 
} 

public static function factory($options = array()) 
{ 
    if ($options instanceof \Traversable) { 
     $options = ArrayUtils::iteratorToArray($options); 
    } elseif (! is_array($options)) { 
     throw new InvalidArgumentException(__METHOD__ . ' expects an array or Traversable set of options'); 
    } 

    if (! isset($options['defaults'])) { 
     $options['defaults'] = array(); 
    } 

    return new static($options['defaults']); 
} 

public function match(Request $request,$pathOffset = null) 
{ 
    if (! method_exists($request,'getUri')) { 
     return null; 
    } 

    $uri = $request->getUri(); 
    $fullPath = $uri->getPath(); 

    $path = substr($fullPath,$pathOffset); 
    $alias = trim($path,'/'); 

    $options = $this->defaults; 
    $options = array_merge($options,array(
     'path' => $alias 
    )); 
    return new RouteMatch($options); 
} 

public function assemble(array $params = array(),array $options = array()) 
{ 
    if (array_key_exists('path',$params)) { 
     return '/' . $params['path']; 
    } 

    return '/'; 
} 

public function getAssembledParams() 
{ 
    return array(); 
} 

}

Я называю это так:

'router' => array(
    'routes' => array(
     'content' => array(
      'type' => 'Module\Router\Content', 
      'options' => array(
       'defaults' => array(
        'controller' => 'Module\Controller\Content', 
        'action' => 'view' 
       ) 
      ) 
     ) 
    ) 
), 

В контроллере ViewAction() вы можете поместить все, что захотите. Надеюсь, это поможет.

(я заимствовал это решение Фром кого-то, но я не могу вспомнить источник больше. :()

+2

Я верю, что это произошло отсюда: http://www.zendexperts.com/2012/12/09/заказ маршрутизации в-Зенд-рамки-2 / –

Смежные вопросы