Zend Framework 2 — Несколько модулей по URL

В настоящее время я использую приложение ZendFrameworkSkeleton из Git и пытаюсь использовать его модульную часть, чтобы иметь множество модулей, изменяемых по URL-адресу, например:

http://localhost/application/index/index/
http://localhost/guestbook/index/index/
http://localhost/forum/index/index/

Кроме того, как бы вы использовали язык для будущего расширения:

http://localhost/en/application/index/index/
http://localhost/de/application/index/index/
http://localhost/en/forum/index/index/

Я бы подумал, что в этом и заключается весь смысл модулей ZF2, и я удивлен, что они, похоже, не работают из коробки. У кого-нибудь есть идеи, как это должно быть сделано, или, возможно, ссылка на пример/учебник?

На данный момент кажется, что маршрутизатор находится в каждом модуле, а не во всем приложении, что, как я думал, должно быть сделано... Я как бы предполагаю, что у вас есть один модуль приложения, который выполняет маршрутизацию и глобальные вещи, внедрение зависимостей и многое другое, а затем другие модули для разных вещей, таких как игра, учетная запись, гостевая книга, форум и т. д.

Как только я разберусь с этим, я могу сделать пример приложения Github, поскольку я знаю, что другим людям это интересно.

Редактировать @ 24/11/2011: С тех пор я наткнулся на сообщение EvanDotPro на форуме участников о том, что они говорят о том, что не хотят использовать модуль / контроллер / действие ZF1, и что их было не так уж много. спрос на него. На самом деле он написал пример, который работал примерно так, но сказал, что это не работает на 100%. Так что любой, кто наткнется на этот пост в поисках дополнительной информации и немного сообразительнее, вот он: https://github.com/EvanDotPro/EdpMagicRoute (если он все еще существует на момент чтения этого!)


person Intellix    schedule 10.11.2011    source источник
comment
Похоже на то, что вы могли бы сделать с помощью пользовательской маршрутизации   -  person Phil    schedule 10.11.2011
comment
Я думал, что это будет так же просто, как добавить что-то вроде: /%module%/%controller%/%action%/, но, похоже, это не работает.   -  person Intellix    schedule 10.11.2011
comment
Хм, поискал, ничего не нашел. Тогда я мог бы объединить эти два, я думаю ... не совсем уверен, как это сделать.   -  person Intellix    schedule 11.11.2011
comment
После использования модуля/контроллера/действия в течение некоторого времени в ZF1 и использования контроллера/действия в ZF2, я бы сказал, что наличие модуля/контроллера/действия довольно избыточно и вынуждает вас иметь излишне длинные URL-адреса.   -  person Intellix    schedule 21.04.2012


Ответы (3)


Я нашел хороший пример на github https://github.com/akrabat/zf2-tutorial + pdf с объяснением http://akrabat.com/wp-content/uploads/Getting-Started-with-Zend-Framework-2.pdf

person Nikolai Senkevich    schedule 17.11.2011
comment
Спасибо, за zf2-tutorial, я искал много примеров, но не могу найти использование формы нигде, кроме как здесь. - person rdo; 21.05.2012

Чтобы изменить маршрутизацию, вам нужно отредактировать Application/confid/module.config.php. Найдите там и измените на

'options' => array(
    'route' => '/[:module/[:controller[/:action]]]', 
    'constraints' => array(
        'module' => '[a-zA-Z][a-zA-Z0-9_-]*', 
        'controller' => '[a-zA-Z][a-zA-Z0-9_-]*', 
        'action' => '[a-zA-Z][a-zA-Z0-9_-]*'
    ), 
    'defaults' => array(
        'module' => 'Application', 
        'controller' => 'index', 
        'action' => 'index'
    )
)

Вы можете видеть, что я добавил /[:module и deafults и ограничение

person Sergey Romanov    schedule 15.02.2012
comment
Можно ли изменить маршрут на поддомен? - person ViniciusPires; 16.10.2013

Вы можете использовать атрибут «child_routes» в файле module.config.php, который находится в папке module\Application\config.

'routes' => array(
        '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(
                        ),
                    ),
                ),
            ),
        ),
    ),

затем вы можете запустить localhost/application/index/index

person sandy    schedule 20.06.2015