Yii - Контроллер в подкаталоге - PullRequest
8 голосов
/ 10 июля 2011

У меня проблема с маршрутизацией Yii Framework.

Я создал контроллер, назовем его TestController.php

Затем мне нужно поместить его в подкаталог с именем Make, чтобы моя структура выглядела так:

controllers/TestController.php
controllers/Make/TestController.php

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

Редактировать
Мой конфиг URLManager выглядит так:

'urlManager'=>array(
            'showScriptName' => false,
            'urlFormat'=>'path',
            'rules'=>array(
                'gii' => 'gii',
                'gii/<controller:\w+>' => 'gii/<controller>',
                'gii/<controller:\w+>/<action:\w+>' =>                                                      'gii/<controller>/<action>',
'<controller:\w+>/<id:\d+>'=>'<controller>/view',
'<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
'<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
            ),
        ),

У меня есть контроллер Bookmarks. Поскольку у меня есть некоторые другие вещи, связанные с закладками, мне нужно было создать каталог bookmarks и поместить туда некоторые контроллеры, например Categories.

Не могу заставить его работать.

Редактировать 2
Только что проверил чистое приложение. Кажется, это ошибка Yii (?).

Редактировать 3
Я изменил конфигурацию импорта, как предложено:

'import'=>array(
        'application.models.*',
        'application.components.*',
        'application.controllers.bookmarks.*'
    ),

Я также создал правильное правило маршрута 'bookmarks/<controller:\w+>/<action:\w+>'=>'bookmarks/<controller>/<action>',.

Моя структура файлов теперь выглядит следующим образом:

BookmarksController.php
bookmarks/CategoriesController.php

Вот исключения, которые выбрасываются:

исключение 'CHttpException' с сообщением 'Система не может найти запрошенное действие "категории". ' в /home/root/www/yiitesting/framework/web/CController.php:477

Ответы [ 4 ]

4 голосов
/ 11 июля 2011

Прежде чем создавать какой-либо подкаталог, имейте в виду, что функция автозагрузки Yii не ищет подкаталоги: Yii хочет автоматически загрузить класс TestController в случае Controller, поэтому добавьте application.controllers.Make. * В декларации импорта:

'import'=>array(
     .....
     'application.controllers.Make.*',
 ),

и, конечно, вы должны добавить правило в urlManager, чтобы помочь Yii найти правильный контроллер, как @ldg.

примечания: в этом случае Yii будет искать представления / Make / * для представления.

2 голосов
/ 11 июля 2011

Вы должны иметь возможность обновить свой менеджер URL с помощью следующей записи:

'urlManager'=>array(
  'urlFormat'=>'path',
  'rules'=>array(
  'Make/<controller:\w+>/<action:\w+>'=>'Make/<controller>/<action>',
  ...

, а затем получить доступ к этому контроллеру через / Make / test [/ action]

1 голос
/ 10 декабря 2014

Моя конфигурация nginx:

переписать ^ / (. *) /Index.php last;

Моя конфигурация Yii urlManager:

    'urlManager'=>array(
        'urlFormat'=>'path',
        'showScriptName' => false, 
        'rules'=>array(
              '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
              '<path:\w+>/<controller:\w+>/<action:\w+>'=>'<path>/<controller>/<action>',
            )
        ),

Также работает следующая конфигурация urlManager:

    'urlManager'=>array(
        'urlFormat'=>'path',
        'showScriptName' => false,
        'rules'=>array(
              '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
              '<abc:\w+>/<controller:\w+>/<action:\w+>'=>'<abc>/<controller>/<action>',
            )
        ),
0 голосов
/ 10 июля 2011

Вы пытались получить доступ через / Make / test вместо / test?Эта функция должна работать из коробки.Приветствия

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...