Удалить строку запроса в 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'
],