Удалить строку запроса в Yii URL

В Yii1.x все, что нам нужно было сделать, это добавить путь что-то вроде '

urlManager'=>array(
    'urlFormat'=>'path', 
    .............
)

Но в Yii2 его уже нет. Как мне сделать мои URL без строки запроса что-то вродеhttp://example.com/forum/post/id/2014/make-yii2-work

РЕДАКТИРОВАТЬ

Так как многие ответы неправильно поняли мой вопрос, позвольте мне немного уточнить. У меня нет проблем с включением prettyUrl и сокрытием index.php от URL. Моя проблема в том, что я не могу создать URL без строки запроса, как я и просил выше

5 ответов

В config.php

'urlManager' => [ 
 'enablePrettyUrl' => true, 
 'showScriptName' => false, 
],

У меня та же проблема. Мой ответ лежит в терминах регулярных выражений. Если ваши "route" (например, "controller/module") и "params" (например, "['id' => 23, 'slug' => 'some-slug']") не соответствуют никому правилу URL в вашем config так, чтобы url manager вернул вам ссылку, как вы написали выше ("some_route?view=myview&id=2")

Вы можете использовать

\yii\helpers\Url::to([''])

создать ссылку на текущую страницу без параметров запроса или поместить любой путь в одинарные кавычки

Как указал @liding в своем ответе, когда параметры не соответствуют вашей конфигурации правил, они будут выведены в URL.

У меня есть аналогичная проблема с перенаправлением входа в систему - я перенаправляю на страницу входа, когда сеанс пользователя завершен, который имеет тот же формат URL, что и страница панели пользователя, например, mysite.com/user и mysite.com/user/peter, и это в результате получается что-то похожее на "mysite.com/user/?slug=".

Таким образом, чтобы удалить "? Slug" из строки запроса, в контроллере входа я использую:

$request = Yii::$app->request;
if ($request->get('slug')) {
    $queryParams = $request->getQueryParams();
    unset($queryParams['slug']);
    $request->setQueryParams($queryParams);
    $this->redirect(['site/login']);
} 

Если вы хотите удалить все параметры запроса, вы можете просто передать пустой массив методу setQueryParams.

В config.php добавить компонент

'components' => [
    'urlManager' => [
                'enablePrettyUrl' => true,
                'showScriptName' => false,
    ],
    ...

.htaccess файл в веб-каталоге

Options +FollowSymLinks
IndexIgnore */*
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php

Также найдите подробные инструкции здесь: http://fellowtuts.com/yii/creating-seo-friendly-url-in-yii-2-0-framework/ и не забудьте проверить ссылки на соответствующие статьи в конце для того, чтобы иметь SEO дружественный URL.

РЕДАКТИРОВАТЬ: Если я вас правильно понял, то вы хотите использовать помощник BaseUrl. Вы можете написать следующим образом:

use yii\helpers\Url;

$path = 'forum/post/id/2014/make-yii2-work';
$url = Url::toRoute([$path]);

<!-- HTML -->
<a href="<?= $url; ?>">Make Yii 2 Work</a>

Где вы можете взять $path значение переменной из базы данных.

Источник:

http://www.yiiframework.com/doc-2.0/yii-helpers-baseurl.html http://www.yiiframework.com/doc-2.0/guide-helper-url.html

Чтобы замаскировать строку запроса, вам нужно добавить правила в диспетчер URL-адресов. Преобразование выполняется на основе сопоставленного значения. В следующем примере идентификатор замаскирован, но вы все равно можете создавать более сложные выражения с большим количеством параметров:

[
    'components' => [
        //...
        'urlManager' => [
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            // RULES
            'rules' => [
                '<controller:\w+>/<id:\d+>'=>'<controller>/view',
                '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
                '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
            ],
        ]
        //...
    ]
];

Например, post/update? Id=1 будет преобразован в post / update / 1.

Пожалуйста, обратитесь к официальному документу DOC https://www.yiiframework.com/doc/guide/2.0/en/runtime-routing.

В main.php

'components' => [
    ....
    'urlManager' => [
            'class' => 'yii\web\UrlManager',
            'enablePrettyUrl' => true,
            'showScriptName' => 'false'
    ],
Другие вопросы по тегам