2013-07-02 4 views
0

Я строю меню, используя навигацию. В моем файле конфигурации, я использую URI (я не мог получить маршрут, контроллер действия для корректной работы)zf2 Навигация isActive не работает с uri

'navigation' => array(
    'default' => array(
     array(
      'label' => 'Home', 
      // not sure why I can't use route, controller, action... 
      // for now, i'm using uri 
      'uri'  => '/', 
     ), 
     array(
      'label'  => 'About us', 
      'uri'  => '/application/intro', 
     ), ... 

маршрут Прикладной модуль является по умолчанию один, установить в качестве такого

 'application' => array(
      'type' => 'Literal', 
      'options' => array(
       'route' => '/application', 
       'defaults' => array(
        '__NAMESPACE__' => 'Application\Controller', 
        'controller' => 'Index', 
        'action'  => 'index', 
       ), 
      ), 
      'may_terminate' => true, 
      'child_routes' => array(
       'default' => array(
        'type' => 'Segment', 
        'options' => array(
         'route' => '/[:controller[/:action]]', 
         'constraints' => array(
          'controller' => '[a-zA-Z][a-zA-Z0-9_-]*', 
          'action'  => '[a-zA-Z][a-zA-Z0-9_-]*', 
         ), 
         'defaults' => array(
         ), 
        ), 
       ), 
      ), 
     ), 

Теперь IsActive не работает, на мой взгляд (частичное) при вызове

<?php foreach ($this->container as $page): ?> 

    <li <?php echo $page->isActive()? 'class="' . $activeClass . '"' : '' ?>> 
    ... 

когда я попытался сделать это вручную, я пытаюсь сравнить с $ this-> URL. Я понял, что $ this-> url возвращает путь к маршруту. Значение, в моем примере, когда я вхожу в/application/intro, $ this-> url будет возвращать только return/application /, а контроллер «intro» не возвращается.

Мой вопрос: как я могу вернуть URL-адрес с контроллером, действием и т. Д.? или что я могу сделать, чтобы убедиться, что isActive может работать правильно.

Заранее благодарен!

Джастин

ответ

1

Из документов на http://framework.zend.com/manual/2.0/en/modules/zend.navigation.pages.html:

Примечание

Zend \ Navigation \ Page \ Uri не будет пытаться определить, следует ли быть активным при вызове $ PAGE-> IsActive(). Он просто возвращает то, что в настоящее время установлено , поэтому для того, чтобы сделать страницу URI активным, вам необходимо вручную указать 0:call $ page-> setActive() или указать активный параметр страницы при построении .

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

Редактировать: Вы используете маршрут «приложение», поэтому, если этот маршрут определен как в вашем OP, он всегда будет возвращать/применять, потому что это литеральный маршрут с свойством route, установленным в/application. Вероятно, вы хотите указать элемент навигации на дочерний маршрут маршрута приложения, так что, если вместо этого вы попытаетесь установить маршрут к приложению/по умолчанию?

+0

Спасибо за примечание Рубен! Действительно ценю это. Я попытаюсь использовать $ this-> url() для проверки и setActive (хотя у меня все еще проблема, потому что $ this-> url() не возвращает URL-адрес с контроллером (/ application/вместо/application/intro). В стороне проблема, с которой я сталкиваюсь в использовании маршрутов, заключается в том, что контроллер и действие не создаются для href. При настройке маршрута к приложению и контроллеру для вступления, getHref() будет только возвращать/приложение (когда я надеюсь чтобы получить/приложение/введение). Держу пари, что это что-то немое, что я забыл. Любые советы? – juworld

+0

Хм, позвольте мне понять это. Вы используете маршрут «приложение», поэтому, если этот маршрут определен как ваш OP, он всегда будет возвращать/применять, потому что это буквальный маршрут с свойством route, установленным в/application. Вероятно, вы хотите указать элемент навигации на дочерний маршрут маршрута приложения, так что, если вы попытаетесь установить маршрут application/default вместо? – Ruben

+0

Спасибо, Рубен! Это определенно исправил его! Мне потребовались часы! Привет, Рубен! – juworld

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