Как правильно использовать группировку роутов?

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Brainfuck
Сообщения: 313
Зарегистрирован: 2018.02.19, 14:20

Как правильно использовать группировку роутов?

Сообщение Brainfuck »

Я пишу в конфиге:

Код: Выделить всё

'urlManager' => [
	'enablePrettyUrl' => true,
	'showScriptName' => false,
	'rules' => [
		[
			'class' => GroupUrlRule::class,
			'routePrefix' => 'profile',
			'rules' => [
				'article/ping' => 'article/ping',
			],
		],
	],
]
Конечно есть соответствующий контроллер с акшэном. Но ссылка /profile/article/ping не работает (404)! Что я делаю не так?

P.S. А если просто прописываю 'profile/article/ping' => 'article/ping' то все работает...

upd. Я продебажил создание урла в UrlManager и в GroupUrlRule.

Вот на этом скриншоте UrlManager:255 - обычное правило (которое работает):

Изображение

А на этом GroupUrlManager:113 - групповое (которое не работает):

Изображение

Видно что GroupUrlManager сделал правило полностью наоборот... Не знаю как с этим бороться
Аватара пользователя
Dominus
Сообщения: 892
Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:

Re: Как правильно использовать группировку роутов?

Сообщение Dominus »

Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
ShNURoK
Сообщения: 168
Зарегистрирован: 2012.04.12, 05:44
Контактная информация:

Re: Как правильно использовать группировку роутов?

Сообщение ShNURoK »

Укажите

Код: Выделить всё

'prefix' => 'profile'
или задавайте путь

Код: Выделить всё

'profile/article/ping' => 'article/ping',
Brainfuck
Сообщения: 313
Зарегистрирован: 2018.02.19, 14:20

Re: Как правильно использовать группировку роутов?

Сообщение Brainfuck »

ShNURoK писал(а): 2018.11.01, 11:52 Укажите

Код: Выделить всё

'prefix' => 'profile'
или задавайте путь

Код: Выделить всё

'profile/article/ping' => 'article/ping',
1. Параметр prefix используется (как я понял) для указания контроллера к которому будет идти запрос. У меня контроллер называется ArticleController, поэтому это тоже будет неверно (я уже все перепробовал). Именно routePrefix указывает шаблон ссылки (точнее его часть).

2. Тогда зачем группировка? Мне группировка для того и нужна чтобы не писать везде profile. Потому что я хочу чтобы у меня в профиле все ссылки начинались с этого слова. В независимости от названия контроллера.
urichalex
Сообщения: 994
Зарегистрирован: 2015.08.07, 11:03

Re: Как правильно использовать группировку роутов?

Сообщение urichalex »

Brainfuck писал(а): 2018.11.01, 12:13
ShNURoK писал(а): 2018.11.01, 11:52 Укажите

Код: Выделить всё

'prefix' => 'profile'
или задавайте путь

Код: Выделить всё

'profile/article/ping' => 'article/ping',
1. Параметр prefix используется (как я понял) для указания контроллера к которому будет идти запрос. У меня контроллер называется ArticleController, поэтому это тоже будет неверно (я уже все перепробовал). Именно routePrefix указывает шаблон ссылки (точнее его часть).
Наоборот

Код: Выделить всё

/**
     * @var string the prefix for the pattern part of every rule declared in [[rules]].
     * The prefix and the pattern will be separated with a slash.
     */
    public $prefix;
    /**
     * @var string the prefix for the route part of every rule declared in [[rules]].
     * The prefix and the route will be separated with a slash.
     * If this property is not set, it will take the value of [[prefix]].
     */
    public $routePrefix;
Brainfuck
Сообщения: 313
Зарегистрирован: 2018.02.19, 14:20

Re: Как правильно использовать группировку роутов?

Сообщение Brainfuck »

urichalex писал(а): 2018.11.01, 12:24 Наоборот

Код: Выделить всё

/**
     * @var string the prefix for the pattern part of every rule declared in [[rules]].
     * The prefix and the pattern will be separated with a slash.
     */
    public $prefix;
    /**
     * @var string the prefix for the route part of every rule declared in [[rules]].
     * The prefix and the route will be separated with a slash.
     * If this property is not set, it will take the value of [[prefix]].
     */
    public $routePrefix;
Погодите... Если я указываю prefix => profile/article и routePrefix => article то все работает... Тогда другой вопрос - возможны ли вложенные группы? Например:

Код: Выделить всё

[
	'class' => GroupUrlRule::class,
	'prefix' => 'profile',
	'rules' => [
		[
			'class' => GroupUrlRule::class,
			'prefix' => 'article',
			'routePrefix' => 'article',
			'rules' => [
				'ping' => 'ping', // так не выходит :(
			],
		],
	],
],
Потому что в идеале я именно этого хотел... У меня ведь в профиле много контроллеров, да и вложенность местами есть.
ShNURoK
Сообщения: 168
Зарегистрирован: 2012.04.12, 05:44
Контактная информация:

Re: Как правильно использовать группировку роутов?

Сообщение ShNURoK »

Brainfuck писал(а): 2018.11.01, 12:13 2. Тогда зачем группировка? Мне группировка для того и нужна чтобы не писать везде profile. Потому что я хочу чтобы у меня в профиле все ссылки начинались с этого слова. В независимости от названия контроллера.
ГРуппировка нужна, для ускорения, процесс поиска роута ускоряется, за счет отсечений по префиксу.
Brainfuck
Сообщения: 313
Зарегистрирован: 2018.02.19, 14:20

Re: Как правильно использовать группировку роутов?

Сообщение Brainfuck »

ShNURoK писал(а): 2018.11.01, 12:40
Brainfuck писал(а): 2018.11.01, 12:13 2. Тогда зачем группировка? Мне группировка для того и нужна чтобы не писать везде profile. Потому что я хочу чтобы у меня в профиле все ссылки начинались с этого слова. В независимости от названия контроллера.
ГРуппировка нужна, для ускорения, процесс поиска роута ускоряется, за счет отсечений по префиксу.
Я имел ввиду конкретно в том случае зачем группировка, но вообще это интересная информация! Я думал это нужно просто для удобства записи! :D
Ответить