Closed bfday closed 4 years ago
Правила обрабатываются в порядке подключения модулей. У вас debug модуль где определен?
Может модуль Payture? Вот принт версия конфиг массива (ненужное почистил).
Array
(
[id] => app-api
[language] => ru-RU
[basePath] => C:\Winginx\home\mrp.ru\api
[controllerNamespace] => api\controllers
[vendorPath] => C:\Winginx\home\mrp.ru/vendor
[bootstrap] => Array
(
[0] => debug
[1] => gii
)
[components] => Array
(
[log] => Array
(
[traceLevel] => 3
[targets] => Array
(
[0] => Array
(
[class] => yii\log\FileTarget
[levels] => Array
(
[0] => error
[1] => warning
)
)
)
)
[errorHandler] => Array
(
[errorAction] => site/error
)
[urlManager] => Array
(
[enablePrettyUrl] => 1
[showScriptName] =>
[rules] => Array
(
[] => /
[deals] => deals/index
[admin] => admin/index
[manager] => manager/index
[<action>] => site/<action>
[<controller>/<action>] => <controller>/<action>
[<module>/<controller>/<action>] => <module>/<controller>/<action>
)
)
[mailer] => Array
(
[class] => yii\swiftmailer\Mailer
[useFileTransport] => 1
[fileTransportPath] => mailer-data
)
[authManager] => Array
(
[class] => yii\rbac\DbManager
)
[user] => Array
(
[identityClass] => api\models\User
[enableAutoLogin] => 1
[loginUrl] => Array
(
[0] => /
)
)
[payture] => Array
(
[class] => api\components\Payture
[key] => xxxx
[url] => xxxx
)
)
[modules] => Array
(
[payture] => Array
(
[class] => bfday\modules\payture\Module
)
[debug] => Array
(
[class] => yii\debug\Module
)
[gii] => Array
(
[class] => yii\gii\Module
)
)
)
Вам нужно правило
'payture/<action>' => 'payture/pature/<action>'
По вашему правилу я понимаю что при обращении к "payture/card-add-url" его будет обрабатывать модуль, а мне нужно чтобы обрабатывал контроллер приложения. Но я описал проблему выше. К тому же у меня нет "pature". К тому же если описать правило так:
'pature/<action>' => 'payture/<action>'
То это работает так же как и без такого правила. Либо у меня не получается объяснить, либо где-то я не прав. Но судя по опечатке "pature" вы не вникли полностью в проблему.
@bfday давайте попробуем воспроизвести на шаблоне basic с минимальными изменениями. Сможете собрать тестовый набор?
@samdark хорошо, постараюсь смоделировать как время появиться.
@samdark https://github.com/bfday/yii2_bug_module_action_vs_controller
Если зайти на "/payture/index" то в отладчике "Request parsed with URL rule:
'modules' => [
'payture' => [
'class' => 'bfday\modules\payture\Module',
'paytureEnv' => 3,
'paytureMerchantKey' => 'Merchant',
'events' => [
],
],
],
То все работает ок. По-моему такое поведение не корректно. Или ошибаюсь?
Не вижу в вашем репозитории никакого payture.
@samdark извиняюсь, забыл изменения залить. Сейчас все готово.
@bfday, дело в том, что у Вас название модуля "payture" совпадает с названием контроллера в приложении.
Действительно, при использовании урла вида payture/card-add-url система распознает его по правилу '
PS: Нужно учитывать, что модуль имеет приоритет. Для работоспособности функционала нужно или сменить название модуля или название контроллера "PaytureController.php" в проекте.
@Mak-Di , пожалуйста, прочтите что я написал в этом треде повнимательнее и поймите, что я и так знаю то, что вы написали, и то, как решить проблему. Вникните в проблему поглубже. Это очень замечательно что вы начали проявлять активность на гитхабе, но будьте чуточку внимательнее.
@Mak-Di , пожалуйста, прочтите что я написал в этом треде повнимательнее
Читал и не один раз, пробегусь еще раз:
Если зайти на "/payture/index" то в отладчике "Request parsed with URL rule: /" но "Loading module: payture". Если из главного модуля выпилить
'modules' => [
'payture' => [
'class' => 'bfday\modules\payture\Module',
'paytureEnv' => 3,
'paytureMerchantKey' => 'Merchant',
'events' => [
],
],
],
То все работает ок. По-моему такое поведение не корректно. Или ошибаюсь?
Ошибаетесь! Это корректное поведение, т.к. в модуле "payture" нет контроллера IndexController.php.
По вашему правилу я понимаю что при обращении к "payture/card-add-url" его будет обрабатывать модуль, а мне нужно чтобы обрабатывал контроллер приложения. Но я описал проблему выше.
Хорошо, идем еще выше к описанию проблемы...
Может я ошибаюсь, но проблема по-моему есть и поведение странноватое, хоть и не критичное в моем случае.
С этого момента идет описание Вашей проблемы?
У меня есть модуль "Payture" и есть контроллер самого приложения с одноименным названием "Payture". Вот такие правила в конфиге главного модуля: ... Модуль подключаю просто: ... Соответственно при обращение по адресу payture/card-add-url система распознает правило (определено через debug модуль) '
/ ' => ' / '
Надеюсь, что все понятно, но повторюсь: Система распознала это правило, но в рамках модуля "payture", т.к. payture является идентификатором модуля... это все дело хорошо описано в доке.
Но при этом возвращается ошибка: ссылка на картинку Если выпилить из конфига подключение модуля, то контроллер отрабатывает. Контроллеры модуля тоже адекватно отрабатывают - тестировал.
Ожидаемое поведение и Вы, как пишите, понимаете это. @bfday, если не затруднит, процитируйте, пожалуйста, суть проблемы или еще раз кратко опишите ее. Буду очень благодарен.
Та же "проблема" в версии 2.0.26. При совпадении имени модуля (system) и контроллера (SystemController) вне модуля приоритет имеет именно модуль.
Проблему решил только переименовав модуль в (system_module) и прописав в роутах правило с нужным путем (не переименованным)
'/system/site/test' => 'system_module/site/test',
Поведение не может быть изменено без поломки обратной совместимости, поэтому в Yii 2.0 ничего сделать с ним не выйдет. Закрываю.
Может я ошибаюсь, но проблема по-моему есть и поведение странноватое, хоть и не критичное в моем случае. У меня есть модуль "Payture" и есть контроллер самого приложения с одноименным названием "Payture". Вот такие правила в конфиге главного модуля:
Модуль подключаю просто:
Соответственно при обращение по адресу payture/card-add-url система распознает правило (определено через debug модуль)
Но при этом возвращается ошибка: ссылка на картинку Если выпилить из конфига подключение модуля, то контроллер отрабатывает. Контроллеры модуля тоже адекватно отрабатывают - тестировал.