Hyperlink 从后端到前端Yii2高级应用程序
我正在尝试将一些控制器从前端链接到后端。几个小时后,我不知道问题出在哪里 后端Hyperlink 从后端到前端Yii2高级应用程序,hyperlink,yii2,yii2-advanced-app,Hyperlink,Yii2,Yii2 Advanced App,我正在尝试将一些控制器从前端链接到后端。几个小时后,我不知道问题出在哪里 后端 file: main.php 'urlManager' => [ 'enablePrettyUrl' => false, 'showScriptName' => false, 'baseUrl' => '/backend/web', ], 'urlManagerFrontEnd' => [
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']))
还我
/高级/backend/web/index.php?r=site%2finder
有什么建议吗?您的代码是正确的。urlManagerFrontEnd应基于baseUrl
/frontend/web
返回url
尝试将baseUrl更改为
http://yourdomain/
我在谷歌上搜索了一下,找到了
作为参考,我张贴在这里相同
我仔细阅读了UrlManager.php,发现如下内容:
这意味着当showScriptName=true
和enablePrettyUrl=false
$baseUrl=getScriptUrl()
否则$baseUrl=getBaseUrl()
因此它只需处理prettyUrl=true
和showScriptName=false
。当我们将prettyUrl设置为true时,需要$baseUrl=getBaseUrl()
将其更改为以下内容可以解决我们的问题=)
现在你必须设置prettyurl=false
,另一个设置为true
我在一个新模板上尝试了这一点,然后应用了您提到的代码,得到了与您相同的错误
但是在我根据这篇文章做了修复之后,我得到了正确的路径
也很有帮助。在前端配置中,将其添加到顶部以定义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行为,您还应该在变量中删除它。使用此代码。它会将您重定向到前端
use \yii\web\Request;
$baseUrl = str_replace('/frontend/web', '/frontend/web', (new Request)->getBaseUrl());
$backEndBaseUrl = str_replace('/frontend/web', '/backend/web', (new Request)->getBaseUrl());
return $this->redirect(Yii::$app->urlManager->createUrl('./../../frontend/web/'));
使用以下一种:
Url::to(Yii::$app->urlManagerBackEnd->createUrl('index.php/'/site/index'),true)代码>@Insaneskull当我尝试重定向到前端时,Yii说找不到我的页面。我被绊倒了,我想知道如何修复它。你不需要Url::to()
看看我的解决方案来修复你的问题。你好@JorgeBrage,请发布你的解决方案作为答案。我想我有这个问题,因为它托管在localhost中,所以,我最终用这种方式解决了它const ROLE_ADMIN=0;公共函数beforeAction($event){//用户变量$User=\common\models\User::findIdentity(Yii::$app->User->id);if(is_null($User)==false){if($User->role==self::role_ADMIN){返回$this->重定向([“站点/注销”];}}返回父级::beforeAction($event);}`
return $this->redirect(Yii::$app->urlManager->createUrl('./../../frontend/web/'));