2016-02-16 5 views
0

Как я должен подготовить свои маршруты, чтобы иметь дело с ним, а не с зависимыми частями в URL-адресе?Zend - статический и динамический маршрут

$routes = array(
/** 
* Static 
*/ 
'news' => new Zend_Controller_Router_Route('news/:page', 
    array('controller' => 'news', 'action' => 'index', 'page' => 1) 
), 

/** 
* Dynamic 
*/ 
'thread' => new Zend_Controller_Router_Route(':slug/:page', 
    array('controller' => 'Thread', 'action' => 'index', 'page' => 1) 
), 

e.g. example.com/ нить имени-слизняк он показывает нить с пробковым нарезанием имени-слизняком но когда я посещаю example.com/ новостей хочет показать нить пробкового новостей. Я хочу статическую страницу здесь.

Заранее спасибо.

+0

Что именно вы хотите достичь, чтобы иметь дело только с динамическими маршрутами, без каких-либо статических? – RomanPerekhrest

ответ

0

Маршрут соответствует маршрутам в обратным порядку их декларации. Учитывая запрос url /news, маршрутизатор попытается сопоставить первый с маршрутом :slug/:page и, конечно же, находит совпадение, поэтому он никогда не сможет проверить ваш маршрут news/:page.

Решение состоит в том, чтобы отменить порядок, в котором вы объявляете маршруты. Вообще говоря, нужно добавить общие маршруты до конкретных.

0

Поскольку последняя версия zendframework - 3.x, я отправлю образец решения для Zf3, потому что это нелегкая полная статья о маршрутах zend.

Вы хотите централизовать ваши запросы администратора, используя только один контроллер; поэтому вы можете проверить разрешения, роли и т. д., чтобы обслуживать страницы администрирования вашего сайта. Мы выполним следующие задачи:

  1. Редактировать файл «module.config.php», чтобы иметь легко читаемый код.
  2. Создать файл DefineRoutes.php
  3. Напишите простое регулярное выражение, чтобы установить подходящие подстановочные места для всех возможных задач администратора.

Я supouse мы создает модуль администратора правильно зарегистрирован в файле "modules.config.php"

Редактирование файла module.config.php:

<?php 
/** 
* @Filename: zendframework/module/Admin/config/module.config.php 
* The module required settings. 
* @author: your name here 
*/ 
return [ 
    'controllers' => [ 
    'factories' => include __DIR__ . '/ControllerFactories.php' 
    ], 
    'router'  => [ 
    'routes' => include __DIR__ . '/DefineRoutes.php', 
    ], 
    'view_manager' => ['template_path_stack' => [__DIR__ . '/../view',],], 
]; 

Примечание: мы делаем не использовать тег close? > в наших файлах

Создание файла «DefineRoutes.php».

<?php 
/** 
* @Filename: zendframework/module/Admin/config/DefineRoutes.php 
* Declares site's admin routes 
* @author: your name here 
*/ 
namespace Admin; 
use Zend\Router\Http\Segment; 

// first a couple of useful functions to make our life easy: 
// Creates a regexp to match all case-variants of a word 
function freeCaseExt($toCase){ 
    $len = strlen($toCase); 
    $out = ''; 
    if($len < 1){ return $out; } 
    for ($i=0; $i<$len; $i++){ 
     $s = strtolower(substr($toCase, $i, 1)); 
     $out .= '['.$s.strtoupper($s).']'; 
    } 
    return $out; 
} 
// To append slash child routes elsewhere 
function SlashUri($controller, $action){ 
    return [ 
     'type' => \Zend\Router\Http\Literal::class, 
     'options' => [ 
      'route' => '/', 
      'defaults' => ['controller' => $controller, 'action' => $action ]]]; 
} 

$adminvariants = freeCaseExt('admin'); // to constrain our main route 

// Our route family tree: 
'admin' => [ 
    'type' => Segment::class, 
    'options' => [ 
     'route'  => '/:admin[/:case][/:casea][/:caseb][/:casec][/:cased][/:casee][/:casef][/:caseg][/:caseh]', 
     'constraints' => [ 
      'admin' => $adminvariants, 
      'case' => '[a-zA-Z0-9][a-zA-Z0-9_-]*', 
      'casea' => '[a-zA-Z0-9][a-zA-Z0-9_-]*', 
      'caseb' => '[a-zA-Z0-9][a-zA-Z0-9_-]*', 
      'casec' => '[a-zA-Z0-9][a-zA-Z0-9_-]*', 
      'cased' => '[a-zA-Z0-9][a-zA-Z0-9_-]*', 
      'casee' => '[a-zA-Z0-9][a-zA-Z0-9_-]*', 
      'casef' => '[a-zA-Z0-9][a-zA-Z0-9_-]*', 
      'caseg' => '[a-zA-Z0-9][a-zA-Z0-9_-]*', 
      'caseh' => '[a-zA-Z0-9][a-zA-Z0-9_-]*' 
     ], 
     'defaults' => [ 
      'controller' => Controller\AdminController::class, 
      'action'  => 'index' 
     ] 
    ], 
    'may_terminate' => TRUE, 
    'child_routes' => [ 
     'adminslash' => SlashUri(Controller\AdminController::class, 'index'), 
    ] 
], 
// Now you have declared all the posible admin routes with or without 
// slaches '/' at 9 deep levels using the AdminController::Index() method 
// to decide wath to do. 

ВНИМАНИЕ: Как мы определили первый уровень группового символа : администратор собственного ограничение требуется или перекрывают другие маршруты первого уровня.

Логические контроллеры - это некоторые из них. Надеюсь, эта идея помогает кому-то.

Luis

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