@Vocler

Почему yii/helpers/Url::To криво генерирует URL во время тестирования?

Вывожу на страницу URL сгенерированный функцией yii/helpers/Url::To:

<?= Url::to(['user/index']) ?>

Если точка входа - обычный index.php (т.е. перехожу по адресу http://localhost/) то вижу правильный URL:
/user/index

Если же точка входа - тестовый index-test.php (адрес - http://localhost/index-test.php) то вижу следующее:
/index-test.php/index-test.php/user/index

Естественно при переходе по ссылке получаю 404 т.к. правильный адрес должен быть /index-test.php/user/index. В чем причина такого поведения?

UPD:Судя по всему баг появляется только если Url::To() используется в \yii\widgets\Menu::widget следующим образом

\yii\widgets\Menu::widget(
            [
                'options' => ['class' => 'sidebar-menu tree', 'data-widget'=> 'tree'],
                'items' => [
                    ['label' => Yii::t('app', 'Label'), 'options' => ['class' => 'header']],
                    [
                        'label' => 'Users',
                        'url' => [Url::to(['user/index'])],
                    ],
				]
			]


Самое интересное в том что если [Url::to(['user/index'])] заменить на Url::to(['user/index']) (т.е. убрать квадратные скобки по краям и передавать в url не массив с одной строкой, а просто одну строку) все работает корректно, хотя в доках сказано что нужно передавать именно массив.
  • Вопрос задан
  • 166 просмотров
Решения вопроса 1
slo_nik
@slo_nik Куратор тега Yii
Открываете консоль.
Вводите команду
php yii serve
В результате работы этой команды в консоли должны увидеть что-то подобное.
Server started on http://localhost:8080/
Document root is "/home/slonik/localhost/www/test.loc/yii2_test/web"
Quit the server with CTRL-C or COMMAND-C.

Переходите в браузере по адресу.
http://localhost:8080/index-test.php
В конфигурационных файлах ничего не меняете.
Получаете страницу без ошибки 404.
5d2f59996db25518154643.png

p.s.
В config/web.php
'urlManager'   => [
            'enablePrettyUrl' => true,
            'showScriptName'  => false,
            'rules'           => [
                ''                            => 'site/index',
                '<_a:(contact|about)>'        => 'site/<_a>',
                '<_a:(login|logout|sign-up)>' => 'users/<_a>',
                '<_c:[-\w]+>/<_a:[-\w]+>'     => '<_c>/<_a>',
                '<_c:[-\w]+>'                 => '<_c>/index',
                '<_a:(offline)>'              => 'offline/index',

            ],
        ],

В config/test.php
'urlManager' => [
            'showScriptName' => true,
        ],
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы