Yii — Как использовать другое название модели из каталога модели?

Я хочу использовать определенное имя папки для моего модуля, но я не хочу, чтобы это имя показывалось конечному пользователю (то есть: в URL). Я попытался установить имя класса, но он говорит мне, что его не существует, когда он ДРУГОЙ, чем он должен быть. Пожалуйста, обратите внимание: имена были изменены в примере, но это все понятно.

В моем конфиге:

'modules'=>array(
'cart'
),

В / protected / modules у меня есть папка ezcart. Это модуль, созданный Gii. Я могу подтвердить, что когда я создаю «корзину» с помощью Gii, она работает как положено.

Проблема заключается в том, источник, я хочу, чтобы имя папки ezcart остаться прежним. Это название моего пакета, который я буду размещать на GitHub, делиться им и использовать для себя в будущем. Таким образом, любой в файлах знает, что к чему, точно так же, как мы сохраняем одинаковые имена в «продавцах» и т. Д.

Так что если я создам ezcart с помощью Gii, в моем config.php, как я могу сказать Yii использовать другое имя каталога. Например, я хочу сделать это:

'modules'=>array(
'cart'=>array(
'class'=>'application.modules.ezcart'
)
),

Тем не менее, он говорит мне, что не может найти ezcart. Как я могу заставить Yii принять эту разницу в именах?

1

Решение

Вы должны использовать URL-маршрутизацию для этого ..
в вашем config / main.php добавьте вот это правило вот так

...
'components' => array(
...
'urlManager'=>array(
'rules'=>array(
'mynewname/<controller>/<action>' =>'ezcart/<controller>/<action>'
)
)
)

увидеть Управление URL в руководстве приведено несколько примеров и что все возможно с помощью маршрутизации

0

Другие решения

РЕШИТЬ !!!

Кажется, когда вы пытаетесь использовать другое имя в URL для вашего модуля, Yii теряет мозги. Я попытался передать $ defaultController и $ defaultAction, а также около 10 других вещей. Я не могу понять, как переопределить сопоставление Yii, установленное на моем модуле «ezpaypal», чтобы я мог изменить его URL-адрес на «billing», но все же указать на «/ modules / ezpaypal».

Сначала создайте модуль с помощью Gii. Я назвал мой «езпайпал». Бум, все генерируется.

Добавьте имя вашего модуля в config.php:

'modules'=>array(
'ezpaypal'
),

Проблема в том, что я не хочу видеть «езпайпал» в URL. Я хочу, чтобы он был изменяемым, поэтому он может быть «/ billing» или «/ checkout». Поэтому мне нужно, чтобы модуль оставался с именем «ezpaypal». Я пытался и пытался с правилами, и столкнулся с кучей проблем.

Кажется, Yii создает корневой псевдоним для «ezpaypal», так как это мой загруженный модуль. И действительно, он работает нормально, если вы используете его как обычно. Он знает, как использовать контроллер, все.

Когда вы используете правила urlManager для сопоставления «выставления счетов» с «ezpaypal» для изменения имени в URL, Yii больше не знает, какой контроллер по умолчанию использовать. Он также не знает, какие действия по умолчанию предпринять, например, / controller / 3, который он не знает сделать / controller / view / 3. Yii просто с ума сошел.

Лучшим решением было бы, если бы у Yii был «скрытый» или не очень известный способ справиться с этим? Я не уверен, где в структуре Yii он анализирует конфигурацию и загружает модули. Может быть, там я найду функцию или переменные для установки, которые исправят это без длинных правил менеджера URL. Правильно обрабатывает правила url модулей для «ezpaypal» без добавления что-нибудь к urlmanager …

Простое решение — написать правила для вашего менеджера URL для каждой возможной комбинации. Может быть, кто-то может очистить это в меньше строк?

'rules'=>array(
// EZPayPal Friendly URL Support - DO NOT TOUCH!
'<module:(billing)>'=>'ezpaypal',
'<module:(billing)>/index'=>'ezpaypal/default/index',
'<module:(billing)>/<controller:\w+>'=>'ezpaypal/<controller>',
'<module:(billing)>/<controller:\w+>/<id:\d+>'=>'ezpaypal/<controller>/view',
'<module:(billing)>/<controller:\w+>/<action:\w+>/<id:\d+>'=>'ezpaypal/<controller>/<action>',
'<module:(billing)>/<controller:\w+>/<action:\w+>'=>'ezpaypal/<controller>/<action>',
),

РАБОТАЕТ 🙂

Если кто-то делает то же самое, используя другой URL-путь для вашего модуля, просто замените «billing» на имя, которое вы хотите указать в URL, и «ezpaypal» на фактическое имя каталога вашего модуля.

PS: Вышеуказанные правила могут быть упрощены? Я не уверен. Кажется, это идеальное сочетание. Если я удаляю один, этот маршрут ломается. Кроме того, я все еще нахожусь в поиске еще более простого пути, чтобы мы могли переопределить это без urlmanager.

0

По вопросам рекламы [email protected]