Страница 1 из 1

Парсинг урл

Добавлено: 2019.08.15, 12:29
Elfer
Нужна возможность возвращать результат парсинга урл средствами Yii. Т.е. какой контроллер, какой экшн, как будто мы открыли эту страницу. Естественно, чтобы правила разбора, прописанные в конфиге учитывались.
Пример: урл = "/site/contacts". В результате получится controller id = "site", action id = "contacts".

Re: Парсинг урл

Добавлено: 2019.08.15, 16:28
ElisDN

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

$result = Yii::app()->urlManager->parseUrl($request);

Re: Парсинг урл

Добавлено: 2019.08.15, 20:32
Elfer
ElisDN писал(а): 2019.08.15, 16:28

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

$result = Yii::app()->urlManager->parseUrl($request);
А в $request что должно быть?
Прописал следующий код:

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

$url = 'site/contacts';
$request = new CHttpRequest();
$request->setBaseUrl($url);
$result = Yii::app()->urlManager->parseUrl($request);
echo $result; // Выводит 'site/index', причём для любых примеров
! Не учитывает urlManager rules в config

Re: Парсинг урл

Добавлено: 2019.08.15, 21:53
ElisDN
Это не baseUrl, а pathOnfo.

Re: Парсинг урл

Добавлено: 2019.08.15, 22:32
Elfer
ElisDN писал(а): 2019.08.15, 21:53 Это не baseUrl, а pathOnfo.
Я ввожу урл, а не pathInfo. "/site/contacts" это я простейший урл привёл. Он может быть совершенно любой, к примеру такой:/user/info/username/victor.html
Средствами Yii этот урл распарсить, согласно правилам в config и я должен получить какой контроллер должен его обрабатывать, action, переменные (в нашем случае $username = victor).

Re: Парсинг урл

Добавлено: 2019.08.15, 23:47
ElisDN
Elfer писал(а): 2019.08.15, 22:32 Я ввожу урл, а не pathInfo.
Вы присваиваете не в "урл", а в "базовый урл". А маршрутизатор парсит "путь". Так что передавайте в $request->setPathInfo($uri).

Re: Парсинг урл

Добавлено: 2019.08.16, 09:49
Elfer
В классе CHttpRequest нету метода setPathInfo(). Вы можете скинуть проверенный готовый код?

Re: Парсинг урл

Добавлено: 2019.08.16, 11:45
ElisDN
Elfer писал(а): 2019.08.16, 09:49 В классе CHttpRequest нету метода setPathInfo().
Тогда единственный вариант - отнаследоваться от CHttpRequest и переопределить метод getPathInfo() и возможно остальные используемые маршрутизатором.