У меня проблема с zend framework 2 Я хочу создать базу данных маршрутизации, например
/hello/index => is Application/Controllers/HomeController /CustomURL => is Application/Controllers/HomeController
CustomUrl i из базы данных я здесь, это мой файл конфигурации
/// 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', ), ), ), ), ),....
вот мой класс Router
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); } }
im very noob, и мне нужна помощь, чтобы сделать эту часть спасибо
* update * Я хочу, чтобы некоторые из них стали учебными пособиями для маршрутизации, основанной на базе данных, в Zend Framework?
Мой маршрутизатор выглядит так:
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 () в контроллере вы можете поместить все, что хотите. Надеюсь, это поможет.
(Я взял это решение у кого-то, но я больше не могу вспомнить источник. :()