我觉得我很亲密.我有htaccess重定向到网站(前端/ web)和/admin路径(backend/web).该网站显示正常,CSS文件加载等.
如果你去:http:// localhost/yii2app / - 它加载主页,并没有在地址栏中重定向,但页面显示所有URL中的前端/ web.
如果你去:http:// localhost/yii2app/admin - 它加载后端登录页面,但它会立即重定向到地址栏中的/ backend/web/site/login(丑陋).
问题:frontend/backend路径显示在URL(地址栏和页面上的链接)中.
我需要的是:我希望整个网站在不显示前端/后端链接的情况下运行.项目的根应该从(不可见)拉出frontend/web而不显示它.所以http:// localhost/yii2app /运行我的整个前端,http:// localhost/yii2app/admin /运行我的整个后端.
为什么?我觉得这个设置在服务器上运行时会非常稳固和优雅.我希望能够将我的项目文件夹直播到一个站点,它工作得很好,而不必有黑客来处理本地vs服务器.
.htaccess文件在/yii2app目录中:
Options -Indexes
RewriteEngine on
<IfModule mod_rewrite.c>
RewriteCond %{REQUEST_URI} !^/backend/web/(assets|css)/
RewriteCond %{REQUEST_URI} admin
RewriteRule .* backend/web/index.php [L]
RewriteCond %{REQUEST_URI} !^/(frontend|backend)/web/(assets|css)/
RewriteCond %{REQUEST_URI} !admin
RewriteRule .* frontend/web/index.php [L]
</IfModule>
Run Code Online (Sandbox Code Playgroud)
现在在前端和后端Web目录中,它们都具有相同的.htaccess:
RewriteEngine on
# if a directory or a file exists, use the …Run Code Online (Sandbox Code Playgroud) 我需要一些帮助在Heroku上设置Yii2高级应用程序.我已经使用Composer在本地安装了Yii,完全遵循他们的指南:http://www.yiiframework.com/doc-2.0/guide-tutorial-advanced-app.html
我的网站在本地工作,有前端和后端:
http://localhost/yii2app/frontend/web/
http://localhost/yii2app/backend/web/
Run Code Online (Sandbox Code Playgroud)
当我推送它并在Heroku上运行时,我收到错误抱怨找不到某些文件.有什么奇怪的,使用我的Heroku应用程序的bash终端,我可以验证文件实际上在那里!Heroku不喜欢'../../'更改目录吗?
PHP Fatal error: require(): Failed opening required '/app/frontend/web/../../common/config/main-local.php'
include_path='.:/app/.heroku/php/lib/php') in /app/frontend/web/index.php on line 12
Run Code Online (Sandbox Code Playgroud)
在'frontend/web/index.php'中是Yii的股票代码(第12行是main-local.php):
$config = yii\helpers\ArrayHelper::merge(
require(__DIR__ . '/../../common/config/main.php'),
require(__DIR__ . '/../../common/config/main-local.php'),
require(__DIR__ . '/../config/main.php'),
require(__DIR__ . '/../config/main-local.php')
);
Run Code Online (Sandbox Code Playgroud)
如果它与'../../'改变目录有关,那么我认为第一个要求会有错误(对于main.php条目).
为了让Herii上的Yii2高级运行,我错过了什么?
更新 - 我创建了一个新的Yii2基本应用程序.应该工作和简单,所以我想.显然,甚至基本的应用程序也不能在Heroku上运行.必须在文档中遗漏某些东西......使用作曲家来安装Yii2 basic,将它放在git下,将其推送到新的heroku堆栈.去看看我的应用程序在heroku上,将/web/index.php添加到网址的末尾.
ReflectionException
Class yii\debug\Module does not exist
Run Code Online (Sandbox Code Playgroud)
然后我将index.php放在包含phpinfo()的根目录中.我可以确认我收到了phpinfo报告.所以php正在运行,它报告PHP 5.6.5.
看起来像Yii2和Heroku在没有一些神奇(并且没有记录)的技巧的情况下表现不佳.我搜索,搜索和搜索,我找不到任何关于此的内容.我不可能是唯一一个试图将Yii应用程序放到Heroku上的人.
所以我尝试了CloudControl.我将我的股票Yii2基本应用程序部署到cloudcontrol,我再次获得了根index.php的phpinfo报告.导航到/web/index.php并获取错误:
Invalid Parameter – yii\base\InvalidParamException
The file or directory to be published does not exist: /srv/www/code/vendor/bower/jquery/dist
Run Code Online (Sandbox Code Playgroud)
是什么赋予了!我可以在本地运行这个很好.当我将它推送到基于云的主机(Heroku或CloudControl)时,它会失败!我认为yiibasic应用程序会更好,至少让它运行PoC,但Yii开箱即用,不会运行这两种服务.还有一些我没想到的东西.
我不确定我要用的是最好的Yii解决方案来处理这个问题.所以我愿意接受更好的解决方案.无论最简单的Yii方式是什么.
我有一个左侧边栏,只需要向登录的用户显示.这不是问题,我知道如何通过选中'Yii :: $ app-> user-> isGuest'来显示内容.
在特定页面上,我不想要这个侧边栏,即使他们已登录.例如,"联系我们"页面不需要左侧边栏.我真的不在乎它是否有侧边栏,但它正在抛弃Bootstrap3列.
<div class="row">
<div class="col-lg-4 center-col">
<div class="site-contact">
<h1><?= Html::encode($this->title) ?></h1>
<p>
If you have business inquiries or other questions, please fill out the following form to contact us. Thank you.
</p>
<div class="row">
<div class="col-lg-12">
[contact form code truncated]
</div>
</div>
</div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
它看起来很棒,位于页面中间,4个宽.
但是,在我的Yii main.php(frontend/views/layouts/main.php)中,我有2个单独的布局,具体取决于用户是否已登录.
<div class="container-fluid mainpage">
<?= Alert::widget() ?>
<div class="row">
<?php if (!Yii::$app->user->isGuest) { ?>
<div class="col-md-3 sidebar">
<?= Menu::widget([
'options' => ['class' => 'nav nav-sidebar'],
'items' …Run Code Online (Sandbox Code Playgroud) twitter-bootstrap yii2 twitter-bootstrap-3 yii2-advanced-app
你如何使用变量添加或获取变量Yii::$app->user->something?
我不想让他们通过identity.我想通过特定的方式进行访问user.
例如,我想获取当前登录用户的用户名和名称:
\Yii::$app->user->username
Run Code Online (Sandbox Code Playgroud)
要么
\Yii::$app->user->name
Run Code Online (Sandbox Code Playgroud) 我正在使用Yii2,为了它的价值,我知道基础知识,并且已经编程了一段时间.这可能是因为该领域缺乏文档(Yii2 JSONP和Responses).我找到的只是返回JSON响应的示例,没有显示JSONP响应.
我从这里开始,Yii Cookbook:https: //github.com/samdark/yii2-cookbook/blob/master/book/response-formats.md
它仅显示JSON和XML的示例,但不显示JSONP.它声明使用FORMAT_JSONP.所以我用JSONP交换了JSON示例.没有,只是一个空白的白页.所以我var_dump()数据,是的数据就在那里!
因此,搜索谷歌搜索"yii2 jsonp","yii2 jsonp错误","yii2 jsonp无法正常工作",以及其他一些变化,我什么也没找到.我在这里搜索了SO,只有2个问题出现了"yii2 jsonp",都没有任何帮助.
我继续学习Yii2文档.这里:http://www.yiiframework.com/doc-2.0/guide-runtime-responses.html
同样,没有JSONP的例子,除了FORMAT_JSONP有效的格式类型之外没有太多谈论它...
我可以很好地使用JSON,但是我试图使用JSONP响应中的数据填充Google Map,因此我需要JSONP.
这是我的控制器:
public function actionMapapi()
{
\Yii::$app->response->format = \yii\web\Response::FORMAT_JSONP;
$data = User::find()->all();
return $data;
}
Run Code Online (Sandbox Code Playgroud)
当我转到URL时,它只是白色.我可以在声明response->格式之前放置一个骰子('here'),并在页面上打印"here".所以控制器正在被访问就好了.如果我换FORMAT_JSONP用FORMAT_JSON它完美的作品,它只是不JSONP.
似乎在如何在Yii2文档中准确处理JSONP方面存在差距,而在线讨论它并不多(我可能会发现).