У меня есть продвинутое приложение yii с внешним и внутренним интерфейсом.
Я пытаюсь добиться того, чтобы я мог получить доступ к интерфейсу с именем клиента.
Пример (местный): http://localhost/myproject/frontend/web/customer1
должен стать http://localhost/myproject/frontend/web/customer1/site/login
при первом посещении
И после входа в систему имя клиента должно остаться в URL. На данный момент URL меняется после входа в http://localhost/myproject/frontend/web/
Информация:
customer
это параметр GET Это всегда должен быть первый аргумент после http://localhost/myproject/frontend/web/
но я не хочу указывать аргумент в каждом перенаправлении или пользовательской ссылке. Я надеюсь, что есть способ сохранить этот аргумент и передать его каждому из следующих изменений сайта.
Что я уже пробовал:
'urlManager' => [
'class' => 'yii\web\UrlManager',
'enablePrettyUrl' => true,
'showScriptName' => false,
'enableStrictParsing' => true,
'rules' => [
'<controller>/<action>' => '<controller>/<action>',
'<customer:\w+>' => '/site/login',
]
],
Но это не работает. Я могу получить доступ только к странице входа в систему, после чего имя клиента больше не отображается в URL.
Мой файл .htaccess выглядит так:
RewriteEngine on
# If a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Otherwise forward it to index.php
RewriteRule . index.php
Я действительно ценю любые подсказки на эту тему.
Чтобы добавить имя клиента ко всем URL, измените правило URL:
<customer:\w+>/<controller>/<action>' => '<controller>/<action>,
Если вы сейчас позвоните yii\helpers\Url::to(['site/index', 'customer' => 'customer'])
вывод будет таким, как вы хотите — /customer/site/index
,
Тем не менее, называть это так во всем проекте — не гибкий подход.
В большинстве случаев Url::to()
Метод используется для генерации внутренних URL.
Если вы передаете массив в $route
позвонит Url::toRoute()
, Таким образом, вы можете просто переопределить этот метод в своем пользовательском компоненте.
namespace frontend\components;
use yii\helpers\Url as BaseUrl;
class Url extends BaseUrl
{
public static function toRoute($route, $scheme = false)
{
$customer = ... // Get saved after login customer name (for example from the session)
$route['customer'] = $customer;
return parent::toRoute($route, $scheme);
}
}
Тогда вы можете просто позвонить frontend\components\Url::to(['site/index'])
добиться того же результата.
Альтернативный способ настройки вспомогательных классов описан в официальной документации Вот.
Обновить:
Также это правило URL '<customer:\w+>' => '/site/login',
является избыточным, и URL должен быть просто site/login
потому что любой пользователь до входа в систему является гостем.
Других решений пока нет …