2014-11-25 3 views
0

Как я могу разобрать URL-адрес в zend framework 2?zend framework 2 URL parse

моя ссылка

мой module.config.php выглядит следующим образом

<?php return array(
'router' => array(
    'routes' => array(

     'read' => array(
      'type' => 'Literal', 
      'options' => array(
       'route' => '/read', 
       'defaults' => array(
        '__NAMESPACE__' => 'Read\Controller', 
        'controller' => 'Index', 
        'action'  => 'index', 
       ), 
      ), 
      'may_terminate' => true, 
      'child_routes' => array(
       'wildcard' => array(
        'type' => 'Zend\Mvc\Router\Http\Wildcard', 
        'options' => array(
         'key_value_delimiter' => '/', 
         'param_delimiter' => '/', 
        ), 
       ), 
      ), 
     ), 
    ), 
), 

'controllers' => array(
    'invokables' => array(
     'Read\Controller\Index' => 'Read\Controller\ReadController' 
    ), 
), 
'view_manager' => array(

    'template_path_stack' => array(
     __DIR__ . '/../view', 
    ), 
),); 

мой полный URL является

lhost/test.net/чтения/идентификатор/QWERTY

и мне нужно получить часть «qwerty», есть ли способ получить ее с помощью zf2? я могу получить полный URL с $this->serverUrl(true);, но не смог retrive этого нужно просто, что последняя часть (не использовать хочу PHP, чтобы разобрать его, если это возможно

+0

Подстановочный тип маршрута [устаревшее] (https://zf2.readthedocs.org/en/latest /modules/zend.mvc.routing.html#zend-mvc-router-http-wildcard-deprecated) некоторое время назад из-за некоторых потенциальных проблем безопасности. Вы должны использовать тип маршрута сегмента, а не подстановочный знак. – edigu

ответ

0

OK I получил ответ на этот вопрос, если кому-то понадобится это

module config:

return array(
    'router' => array(
     'routes' => array(
      'read' => array(
       'type' => 'Literal', 
       'options' => array(
        'route' => '/read/id', /* Need close slash '/' */ 
        'defaults' => array(
         '__NAMESPACE__' => 'Read\Controller', 
         'controller' => 'Index', 
         'action'  => 'index', 
        ), 
        'constraints' => array(
         'news' => '[A-Z]+', /* Mask for first paremeter need different from second parameter */ 
        ) 
       ), 
       'may_terminate' => true, 
       'child_routes' => array(
        'default' => array(
         'type' => 'Segment', 
         'options' => array(
          'route' => '/[:news]', 
          'constraints' => array(
           'news' => '.*', /* Mask for first parameter need different from second parameter */ 
          ), 
          'key_value_delimiter' => '/', 
          'param_delimiter' => '/', 
         ), 
        ), 
       ), 
      ), 
     ), 
    ), 
); 

Контроллер илит:

$news = $this->params()->fromRoute('news'); 

return new ViewModel(array('news' => $news)); 

и PHTML файл

просто назвать его $news

0

маршруты

... 
    'read' => array(
     'type' => 'Segment', 
     'options' => array(
      'route' => '/read[/:first][/:second][/]', /* Need close slash '/' */ 
      'defaults' => array(
       '__NAMESPACE__' => 'Read\Controller', 
       'controller' => 'Index', 
       'action'  => 'index', 
       'first'   => 'default', 
       'second'  => 'default' 
      ), 
      'constraints' => array(
       'first' => '[0-9]+', /* Mask for first paremeter need different from second parameter */ 
       'second' => '[a-z]+' /* Mask for second parameter need different from first parameter */ 
      ) 
     ) 
... 

В контроллере

...Action() 
... 
    $this->params('first'); 
    $this->params('second'); 
... 
+0

, когда я поставил этот тип маршрута я получаю ошибку 404 – Night5talker

+0

показать исключение на 404 странице, пожалуйста – newage

+0

«Произошла ошибка 404 Страница не найдена. Запрошенный URL не может быть сопоставлен с помощью маршрутизации. Нет исключений доступна» – Night5talker