2015-09-29 4 views
1

В настоящее время я использую статические маршруты, но мне было интересно, если вы можете иметь статические и динамические маршруты вместе. Поэтому я использую это:zf2 корень url статический и динамический

'contact' => array(
     'type' => 'literal', 
     'options' => array(
      'route' => '/contact', 
      'defaults' => array(
       'controller' => 'Application\Controller\IndexController', 
       'action'  => 'contact', 
      ), 
     ), 
    ), 

, и я хотел бы использовать что-то вроде этого вместе с этой

'contact' => array(
     'type' => 'segment', 
     'options' => array(
      'route' => '/:curated_url', 
      'defaults' => array(
       'controller' => 'Application\Controller\IndexController', 
       'action'  => 'curated', 
      ), 
     ), 
    ), 

Динамический маршрут будет принимать все, хотя и угнать статические маршруты. Итак, я смотрел на использование маршрутизации действий, но curated_url мог быть чем угодно.

Можно ли использовать динамический вариант и иметь значения по умолчанию, где, если его нет, тогда он будет искать в базе данных, чтобы увидеть, находится ли он там?

********** ********** EDIT

Так вот что я раскручивается в настоящее время, и она работает, но я знаю, что есть лучший Кстати, я просто не знаю, что лучше.

router.config.php

'curated-url' => array(
    'type' => 'Zend\Mvc\Router\Http\Segment', 
    'options' => array(
     'route' => '/:url', 
     'defaults' => array(
      'controller' => 'Application\Controller\IndexController', 
      'action'  => 'custom', 
     ), 
    ), 
), 

IndexController.php

/* 
* Special kind of special 
*/ 
public function customAction() 
{ 
    $params = array(); 
    $type = $this->params('url'); 

    if ('contact' == $type) { 
     $params = $this->contactAction($this->getRequest()); 
    } else if ('discover' == $type) { 
     $params = $this->discoverAction(); 
    } else if ('how-it-works' == $type) { 
     $params = $this->howItWorksAction(); 
    } else if ('privacy-policy' == $type) { 
     $params = $this->privacyPolicyAction(); 
    } else if ('questions' == $type) { 
     $params = $this->questionsAction(); 
    } else if ('terms-of-use' == $type) { 
     $params = $this->termsOfUseAction(); 
    } else if ('volunteer' == $type) { 
     $params = $this->volunteerAction(); 
    } else { 
     $params = $this->curatedAction($type); 
     $type = 'curated'; 
    } 

    $view = new ViewModel($params); 
    $view->setTemplate('application/index/' . $type); 

    return $view; 
} 

ответ

0

Я не совсем уверен, если это то, что вы имели в виду, но я считаю, нужно указать ключ ограничения, пусть я покажу вам, как:

'contact' => array(
    'type' => 'segment', 
    'options' => array(
     'route' => '/:curated_url', 
     'constraints' => array(
      'curated_url' => '[a-zA-Z][a-zA-Z0-9_-]+', 
     ), 
     'defaults' => array(
      'controller' => 'Application\Controller\IndexController', 
      'action'  => 'curated', 
     ), 
    ), 
), 

Итак, если вы passsomething как:

https://yoururl.com/aaaAAA1_2

Он укажет на кураторское действие.

+0

Таким образом, ограничения ограничивают только то, что можно сопоставить, я хочу иметь свои маршруты по умолчанию; '/ about-us','/contact', '/ privacy-policy' и т. д. Но также имеют свои динамические маршруты вместе, поэтому мой пользователь создал маршруты, которые в этом случае будут именами групп (т.е. -'/dev-group', '/ just-another-group' также они не всегда будут иметь группу в конце их). Динамически созданные маршруты будут в базе данных, тогда как мои маршруты по умолчанию в настоящее время находятся в статических файлах. – gmaniac

+0

не уверен, что я понял, но я использую его, чтобы передать что-то вроде /type/id/free-text-for-seo.html, так например: /group-name/1/administrator.html, если это то, что вам нужно, чтобы вы могли играть с ограничениями, а затем в действии, которое вы проверили бы, является ли id действительным – peterpeterson

+0

Я разместил обновление, которое может объяснить, что я пытаюсь сделать – gmaniac

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