谁一开始就是大神?

PHP 第96页

PHP

yii2rbacaddChild出错了[2.0]

Aibysea阅读(62)

$auth = Yii::$app->authManager;
$parent=$auth->createPermission('channel/index');
$parent->description='栏目管理';
$auth->add($parent);
$child=$auth->createPermission('channel/list');
$child->description='查看';
$auth->addChild($parent, $child);

栏目管理这个权限我看数据库是添加进去的,但下面这个子权限就出错。
Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails

因为你的子权限在auth_time表里面还不存在,,所有你加不进去,,约束了

checkbox制template[2.0]

Cindyapple阅读(69)

checkbox(['template'=>"<div class=\"test\">{label}{input}{error}</div>"]);

这种配置文件写到那个位置呢?

类似这样?

yii2不想数据库为全局连接[2.0]

ACGStone阅读(73)

在yii2中 不想数据库连接为全局 想做个底层 工具类(sqlhelper) 专门连接数据库 该怎么弄啊。 你们有弄过吗?有案例就更好了。

指南的说明
如果不想定义数据库连接为全局应用组件,可以在代码中直接初始化使用:

yii2构造方法[2.0]

Hazelbubble阅读(56)

需要在controller中初始化一些参数

重写init,beforeAction,根据你的需要。初始化变量建议重写init
重写__construct 这个也行
微信图片_20170503164949.jpg

yii2后台页面如何控制没有登录的情况下,全部跳转到登录页面?[2.0]

Neotom阅读(65)

yii2 后台页面如何控制没有登录的情况下,全部跳转到登录页面?

为了你以后做权限控制,建议增加一个 控制器中间层 在中间层用 beforeAction 做统一的过滤 代码如下
写一些控制器类,如果是游客就跳到登陆页,其它的控制器继承这个类
两个方式,一个是写个控制器基类,然后继承其init方法,然后做判断。
第二个方式是,在Module类里进行处理也是一样的。
各有好处,看你场景。

请教一个小细节问题[2.0]

momolovely阅读(64)

我用phpstorm
这样七牛会画绿色波浪线,看起来很烦

class QiniuController extends Controller
{

}

这样呢就没有波浪线了,其实感觉还是挺烦囧。

class QiNiuController extends Controller
{

}

IDE的拼写检查而已,可以关掉。如果楼主是强迫症患者,或者想写出可读性高代码,不建议关闭。
然后呢?你想表达什么意思 ? 七牛的英文怎么拼?
是因为你的phpStorm开启词法检查了,咱们的汉语拼音词法检查根本就通不过,建议把词法检查关掉。
phpstorm 是怎么认出qi和niu是两个字的?好神奇

为什么每次获取model对象时,都会出现"SHOW"语句?可以避免么?[2.0]

Newdear阅读(67)

QQ截图20150609215040.png

use app\models\Article;
$test1  = Article::find()->where($map)->asArray()->one();
$test2  = Article::find()->where($map)->one();
$test3  = $test2->title;

其中$test2的过程会比$test1过程多一条“SHOW”查询,$test3多两条。

我是想把关联表的查询封装到一个模型内,没有封装时候调试工具显示只有5条查询,一旦将另一个模型封装在当前模型, 就变成了9条。

虽然看起来耗时很短,想问一下这个”show”语句的影响。

一个尝试性的封装,下面的只是一个例子,方式如下:

//文章表如下所示,还有个内容表,内容在内容表的"Content"字段中
namespace api\models;
use sys\core\base\BaseActiveRecord;

class Article extends BaseActiveRecord {

    private $_content = null; //表单"content",私有属性:文章内容。
/***********************************此处省略x行代码***********************************************/
    //用于获取文章内容
    public function getContent() {
        if ($this->isNewRecord) {
            return null;
        } else {          
            return $this->_content == null ? ArticleContent::findOne($this->content_id)->content : $this->_content;
        }
    }

调用如下所示:

$articleModel= Article::find()->where($sql)->one();
$articleContent=$articleModel->content;//由于对象$articleModel没有content,会自动调用getContent()方法,就和访问自己的属性一样了

上面这种方式获取文章内容会多出:

SHOW CREATE TABLE `frontend_article_content`
SHOW CREATE TABLE `frontend_article`
SHOW FULL COLUMNS FROM `frontend_article_content`
SHOW FULL COLUMNS FROM `frontend_article`

你看我如果用下面的方式获取文章内容就不会出现”show”语句:

$articleModel= Article::find()->where($sql)->asArray()->one();
$content     = ArticleContent::find()->where(['id' => $articleModel['content_id']])->asArray()->one();

但是却少了一些便利性,一定程度上也不能安全的保护数据,毕竟是关联模型。

数据库配置中开启表结构缓存 就没了。
楼上回答的很清楚了,赞一个
楼上回答的很清楚了,赞一个

Yii2执行效率问题[2.0]

CandyJames阅读(62)

最近一直用2.0.4进行开发,在开发的过程中发现一个简单的页面,debuger显示的time居然要1600ms。该页面只是连了数据库读取了一个表的数据并显示出来而已。你们用yii2开发的app也是要加载那么久吗?

QQ图片20150624173005.png

查看log里面耗时最久的就是渲染view了

21	17:23:14.396	trace	yii\base\View::renderFile	Rendering view file: 
22	17:23:15.051	trace	yii\base\View::renderFile	Rendering view file: 

占了 600多ms

最后自己研究出来了,使用Yii2 必须开启opcache,开启和没有开启真心差好远。php5.5自带的 php5.4请自行安装

开发环境和生产环境差别比较大,没办法一起比较,我测试过,开发环境光加载debugger和gii相关内容就要消耗很多时间
我觉得电脑该时刻是不是内存已经用了很多了,我出现这种情况,time会很快上升,但是关掉几个软件之后又正常了。
Database Queries你的是多少次
我的13次,6个asset绑定,达到300ms
第一次打开比较慢,第二次就比较快了,因为第二次有缓存了。
貌似yii的视图加载是硬伤,没有页面缓存的情况下或者第一次加载时都会比较慢,因为yii的视图渲染差不多就是require_once来加载的嵌套

yii2后台验证验证码[2.0]

Jackpony阅读(66)

整合了smarty3,想过这种(当然不行的

function init() {
    parent::init();
    $this->captobj = new CaptchaAction(yii::$app->controller->id, $this);
    $this->_params['captcha_session_code'] = $this->captobj->getVerifyCode();
}

这种可以,不过id随便取似乎不太好。。。

function init() {
    parent::init();
    $this->captobj = new CaptchaAction(1111, $this);
    $this->_params['captcha_session_code'] = $this->captobj->getVerifyCode();
}

试试这样写:

登录

找回密码

注册