我正在尝试将一些控制器从前端连接到后端。几个小时后我就不知道问题出在哪里了。
后端
file: main.php
'urlManager' => [
'enablePrettyUrl' => false,
'showScriptName' => false,
'baseUrl' => '/backend/web',
],
'urlManagerFrontEnd' => [
'class' => 'yii\web\urlManager',
'baseUrl' => '/frontend/web',
'enablePrettyUrl' => false,
'showScriptName' => false,
]
file: SiteController.php
public function actionIndex()
{
// User's variable
$user = \common\models\User::findIdentity(Yii::$app->user->id);
if($user->role != self::USER_ADMIN){
return $this->redirect(Url::to(Yii::$app->urlManagerFrontEnd->createUrl(['/site/index'])));
}
return $this->render('index');
}用这个
Url::to(Yii::$app->urlManagerFrontEnd->createUrl('/site/index'))
还我
/advanced/backend/web/index.php?r=site%2Findex
有什么建议吗?
发布于 2015-09-10 10:17:03
你的代码是正确的。urlManagerFrontEnd应该返回基于baseUrl /frontend/web的url。
尝试将baseUrl更改为http://yourdomain/
发布于 2015-09-10 10:38:13
我搜索了一下,发现了此链接。
作为参考,我在这里张贴同样的文章。
我在UrlManager.php中到处阅读,发现了以下内容:
$baseUrl = $this->showScriptName || !$this->enablePrettyUrl ? $this->getScriptUrl() : $this->getBaseUrl();所以这意味着当
showScriptName= true和enablePrettyUrl=false$baseUrl = getScriptUrl()另有$baseUrl = getBaseUrl()所以它只适用于prettyUrl=true和showScriptName = false。当我们将prettyUrl设置为true时,使用$baseUrl = getBaseUrl()将其更改为以下内容,它解决了我们的问题=)。
/*$baseUrl = $this->showScriptName || !$this->enablePrettyUrl ? $this->getScriptUrl() : $this->getBaseUrl();*/
$baseUrl = !$this->showScriptName || $this->enablePrettyUrl ? $this->getScriptUrl() : $this->getBaseUrl();现在你必须把
prettyurl=false和另一个设置在真实的et上
我在一个新的模板上尝试了这一点,然后应用了您刚才提到的代码,并得到了与您相同的错误。
但是在修复之后,根据这篇文章,我得到了正确的路径。
这个链接也很有用。
发布于 2015-09-10 11:03:35
在前端配置中,将其添加到顶部以定义2个变量。
use \yii\web\Request;
$baseUrl = str_replace('/frontend/web', '/frontend/web', (new Request)->getBaseUrl());
$backEndBaseUrl = str_replace('/frontend/web', '/backend/web', (new Request)->getBaseUrl());并将这些变量设置为组件中的baseUrl参数。
'components' => [
'urlManager' => [
'class' => 'yii\web\urlManager',
'enablePrettyUrl' => false,
'showScriptName' => false,
//'baseUrl' => '/frontend/web',
'baseUrl'=> $baseUrl,
],
'urlManagerBackEnd' => [
'class' => 'yii\web\urlManager',
'enablePrettyUrl' => false,
'showScriptName' => false,
//'baseUrl' => '/backend/web',
'baseUrl' => $backEndBaseUrl,
],然后,您可以有从前端到后端的链接。
$backendUrl= Yii::$app->urlManagerBackEnd->createUrl('//');
echo yii\helpers\Html::a('link to backend', $backendUrl);要使后端和前端的配置相同,将其添加到后端配置中:
use \yii\web\Request;
$baseUrl = str_replace('/backend/web', '/backend/web', (new Request)->getBaseUrl());
$frontEndBaseUrl = str_replace('/backend/web', '/frontend/web', (new Request)->getBaseUrl());在组成部分中:
'urlManager' => [
'class' => 'yii\web\urlManager',
'enablePrettyUrl' => false,
'showScriptName' => false,
'baseUrl'=> $baseUrl,
],
'urlManagerFrontEnd' => [
'class' => 'yii\web\urlManager',
'enablePrettyUrl' => false,
'showScriptName' => false,
//'baseUrl' => '/backend/web',
'baseUrl' => $frontEndBaseUrl,
],要创建链接,请使用:
$frontendUrl= Yii::$app->urlManagerFrontEnd->createUrl('//');
echo yii\helpers\Html::a('link to frontend', $frontendUrl);当然,忘了你也可以链接到特定的页面,例如从后端到前端站点/关于:
$frontendUrl= Yii::$app->urlManagerFrontEnd->createUrl('/site/about');
echo yii\helpers\Html::a('link to frontend site about', $frontendUrl);顺便说一下。如果您已经通过某些htaccess删除了/web行为,那么您也应该在变量中删除它。
https://stackoverflow.com/questions/32497350
复制相似问题