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

#php #zend-framework2

#php #zend-framework2

Вопрос:

В настоящее время я использую приложение 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 на форуме contributor о том, что они говорят о том, что они не хотят использовать модуль ZF1 / контроллер / способ действия, и что на это не было такого большого спроса. На самом деле он написал пример, в котором было запущено что-то вроде этого, но сказал, что это не сработало на 100%. Итак, любой, кто натыкается на этот пост в поисках дополнительной информации и немного более подкован, тогда это оно: https://github.com/EvanDotPro/EdpMagicRoute (если оно все еще существует на момент прочтения этого!)

Комментарии:

1. Звучит как то, чего вы могли бы достичь с помощью пользовательской маршрутизации

2. Я думал, что это будет так же просто, как добавить что-то вроде: /%module% /% controller% /% action% / но, похоже, это не работает

3. Хм, выполнил поиск и ничего не смог найти. Тогда, я думаю, можно было бы объединить эти два… не совсем уверен, как это сделать.

4. После довольно долгого использования модуля / контроллера / action в ZF1 и значительного использования контроллера / action в ZF2 я бы сказал, что наличие модуля / контроллера / action является излишним и вынуждает вас иметь излишне длинные URL-адреса

Ответ №1:

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

Комментарии:

1. Спасибо, за zf2-tutorial, я искал много примеров, но нигде не могу найти использование формы, кроме как здесь.

Ответ №2:

Чтобы изменить маршрутизацию, вам нужно отредактировать 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 и ограничение

Комментарии:

1. Возможно ли изменить маршрут к поддомену?

Ответ №3:

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

 'routes' => array(
        'application' => array(
            'type'    => 'Literal',
            'options' => array(
                'route'    => '/application',
                'defaults' => array(
                    '__NAMESPACE__' => 'ApplicationController',
                    '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/индекс