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/'));