首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从后端到前端Yii2高级应用程序

从后端到前端Yii2高级应用程序
EN

Stack Overflow用户
提问于 2015-09-10 08:57:11
回答 5查看 6.4K关注 0票数 3

我正在尝试将一些控制器从前端连接到后端。几个小时后我就不知道问题出在哪里了。

后端

代码语言:javascript
复制
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

有什么建议吗?

EN

回答 5

Stack Overflow用户

发布于 2015-09-10 10:17:03

你的代码是正确的。urlManagerFrontEnd应该返回基于baseUrl /frontend/web的url。

尝试将baseUrl更改为http://yourdomain/

票数 0
EN

Stack Overflow用户

发布于 2015-09-10 10:38:13

我搜索了一下,发现了此链接

作为参考,我在这里张贴同样的文章。

我在UrlManager.php中到处阅读,发现了以下内容:

代码语言:javascript
复制
$baseUrl = $this->showScriptName || !$this->enablePrettyUrl ? $this->getScriptUrl() : $this->getBaseUrl();

所以这意味着当showScriptName= trueenablePrettyUrl=false $baseUrl = getScriptUrl()另有$baseUrl = getBaseUrl() 所以它只适用于prettyUrl=trueshowScriptName = false。当我们将prettyUrl设置为true时,使用$baseUrl = getBaseUrl()将其更改为以下内容,它解决了我们的问题=)。

代码语言:javascript
复制
/*$baseUrl = $this->showScriptName || !$this->enablePrettyUrl ? $this->getScriptUrl() : $this->getBaseUrl();*/

$baseUrl = !$this->showScriptName || $this->enablePrettyUrl ? $this->getScriptUrl() : $this->getBaseUrl();

现在你必须把prettyurl=false和另一个设置在真实的et上

我在一个新的模板上尝试了这一点,然后应用了您刚才提到的代码,并得到了与您相同的错误。

但是在修复之后,根据这篇文章,我得到了正确的路径。

这个链接也很有用。

票数 0
EN

Stack Overflow用户

发布于 2015-09-10 11:03:35

在前端配置中,将其添加到顶部以定义2个变量。

代码语言:javascript
复制
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参数。

代码语言:javascript
复制
'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,
    ],

然后,您可以有从前端到后端的链接。

代码语言:javascript
复制
$backendUrl= Yii::$app->urlManagerBackEnd->createUrl('//');
echo yii\helpers\Html::a('link to backend', $backendUrl);

要使后端和前端的配置相同,将其添加到后端配置中:

代码语言:javascript
复制
use \yii\web\Request;
$baseUrl = str_replace('/backend/web', '/backend/web', (new Request)->getBaseUrl());
$frontEndBaseUrl = str_replace('/backend/web', '/frontend/web', (new Request)->getBaseUrl());

在组成部分中:

代码语言:javascript
复制
'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,
    ],

要创建链接,请使用:

代码语言:javascript
复制
$frontendUrl= Yii::$app->urlManagerFrontEnd->createUrl('//');
echo yii\helpers\Html::a('link to frontend', $frontendUrl);

当然,忘了你也可以链接到特定的页面,例如从后端到前端站点/关于:

代码语言:javascript
复制
$frontendUrl= Yii::$app->urlManagerFrontEnd->createUrl('/site/about');
echo yii\helpers\Html::a('link to frontend site about', $frontendUrl);

顺便说一下。如果您已经通过某些htaccess删除了/web行为,那么您也应该在变量中删除它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32497350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档