谁一开始就是大神?

PHP 第103页

PHP

RBAC流程[2.0]

HaHapple阅读(89)

作为伸手党是罪孽的,但是恳请大神,给我指一条明路,万谢,待我学成一日必定反哺大家~谢谢!

额,骚年去看范迪塞尔大神的案例,我叫案例,实在看不懂晚上@我,等我蹭饭回来后讲。
Yii2-admin 不谢
这个还是比较简单的。可以看教程慢慢来。把伸手改为伸腿,慢慢试探着走,就好了。www.yiiframework.com里面有很多RBAC的插件,你也可以弄下来试试,也挺方便的。

View中的beginPage,beginBody方法有什么用[2.0]

CandyJames阅读(84)

点击去看源码,beginPage说的是标记页面的开始,beginBody说的是标记一块body区域,没明白是什么意思。我没写这几个方法,布局文件还是正确读出来来的的,小白求教

这个标记在注册js或css的时候会用到,一般js会被注册到紧挨</body>的上面,也可以注册到<body>的下面,所以beginBody 是body开始的标识。
这个方法在哪个文件里定义的?
yujfryhjfghfghj

配置路由之后找不到文件了[2.0]

CGJames阅读(81)

今天配置了一个路由, 但是配置好了之后却报 not found
这个是我的配置:

'urlManager'=>[
	'enablePrettyUrl' => true,
	'showScriptName' => false,
	'suffix' => '.html',
]

没有配置前的路径为 http://127.0.0.1:8000/blog-advanced/backend/web/index.php?r=sys/index
配置之后为 http://127.0.0.1:8000/blog-advanced/backend/web/sys/index.html

没配置路由钱一切正常,配置了之后就报下面的问题

Not Found

The requested URL /blog-advanced/backend/web/sys/index.html was not found on this server.

.htaccess 的
.htacess 文件加下

如何选择yii?

SlyLion阅读(79)

现在单位的电脑都是安装XP,或者win7的。我是使用deepin的Linux系统,借XAMPP和YII的光,开发一个简单的网站。但是这个网站做好后要部署到XP上去。而XP能够支持的XAMPP版本很低,使用YII2.0够呛。
为了使用YII2.0,可以放弃XAMPP,另外找其他的软件。哪位同仁可有好的建议,在XP下怎么使用YII的版本,以及选择啥样的apache,或者XAMPP好?
先谢谢啦。

把网站部署到XP上?生产环境你用 xampp?生产环境的配置最好还是自己一个一个装吧,Yii2.0 最低支持php5.4,PHP 5.5以上xp系统已经不支持,所以你没选择,只有 PHP5.4+apache2.2/2.4
我就问你为啥非要用 XP ?
建议使用phpstudy
赞同楼上,使用phpStudy
wamp么?是要开发环境么
-.-这问题问的,其实所谓的限制也就是PHP版本需要》5.4,现在主流的继承环境wampserver,APPserve,phpstudy都是在5.4以上的,而且其中有好几个都可以自由更换php版本。再不济,你自己配个wamp+mysql环境就好,没问题,妥妥的。
XP好像支撑不起来集成php5.4的环境包了
好好好换了的样子啊,一定要十个字吗
我在xp下进行yii2的开发,都是用phpstudy
装个虚拟机,VM的,然后装个64位的2003的系统,你爱咋用杂用,最后网卡做个桥接就行了。
你们单位穷得连台服务器都没有吗?

为什么我Model->load()后属性还是为null[2.0]

Marklove阅读(84)

public function actionIndex(){
    $student = new Student();
    if($student->load(Yii::$app->request->post())){
        return $this->render('student_info',['student'=>$student]);
    }else{
        return $this->render('student');
    }
}

这是Controller里面的代码,post()返回的数组我查看了是有值的,load方法也执行过了,但是student对象的属性查看了依然为null,这是为什么?

发出你视图的代码,这样看不出什么问题
我也遇到了这个问题,研究了很长时间,后来决定看源代码。
打开 vendor/yiisoft/yii2/base/Model.php
load()方法调用了setAttributes($values, $safeOnly = true)。
$values就是我们post过来的数据,$safeOnly没有理解,默认true,但是load()在调用setAttributes()没有传递$safeOnly参数,导致默认$safeOnly等于true
setAttributes()方法中有这样一句
$attributes = array_flip($safeOnly ? $this->safeAttributes() : $this->attributes());
入托$safeOnly = true 调用 $this->safeAttributes(),否则调用$this->attributes()
这两个方法应该都是返回当前model所定义的字段数组,但是$this->safeAttributes()始终为[],我试了一下$this->attributes()可以正常返回字段数组。
所以解决办法:
在load()调用setAttributes()时,传递第二个参数$safeOnly为false,一共两处。
再测试成功了。 🙂
我一直在使用Laravel这个框架,非常的好用,而且感觉非常专业bug极少(目前我还没遇到过)。我也是刚接触yii这个框架,第一天就卡在了这里,看着官方教程做的。瞬间对这个框架没什么信心了。
我也一直在查是啥原因,感谢!!
应该是没用对吧
load()方法是考虑安全性的,所以load赋值成功的前提是你的model有rules,而且你的属性加了相关的rule
例如
这个问题 也可能是设置了 scenario 后, 但是Model里没有写需要验证的字段

禁用JQuery以后为啥还有的页面会加载[2.0]

HarryJames阅读(77)

public $depends = [
        //'yii\web\YiiAsset',
        //'yii\bootstrap\BootstrapAsset',
];

在AppAsset.php禁用掉JQuery以后,再用gii生成的CURD页面后,除了view页面中还会出加载JQuery

GridViewListView 都依赖于 jQuery

关闭网页底部默认的debug栏目[2.0]

Cleverlovely阅读(75)

yii-debug-toolbar还有日志log什么的都默认显示在网页底部,测试的时候debug很好用,但是现在我网页昨完了,需要把debug这个栏目隐藏掉,应该如何设置?跟主页里的defined(‘YII_DEBUG’) or define(‘YII_DEBUG’, true);有关吧,还要修改哪里?

在config下面的web.php文件里面有段代码是:
将这段代码的if条件取反即可!
或者在您提供的代码里,常量YII_DEBUG的值设为false亦可。
希望可以帮到您!
20150330鬼一浪人
index.php里把开发模式的相关开关注释了就好,你打开源码一看就明白。
强大的框架,强大的phper
强大的框架,强大的phper
评论测试测试
评论测试测试

Yii2如何输出SQL语句?[2.0]

GraceKeo阅读(79)

请问如何输出连贯操作的sql语句?
比如 find()->all()使用的什么sql语句?

如果你是想打印本次的Sql的话,可以用 $model->find()->createCommand()->getRawSql();
可以在网页底部的debugger看到,点击log可以看到你执行的sql语言(也就是连贯操作的sql语句);
比如在controller里面你执行 $query= ReleaseForm::find()->where(['type'=>1])->all();
注:源代码是这些:
在网页里你点击底部的log就可以看到:
这样就知道你执行了什么sql语句了
开启dev debug,然后URL:
http://yourDomain/debug
echo $query->createCommand()->sql;
真 tm 难用
也可以不用getSql();
在updateAll这个方法上点进去:
转到这段代码:
再点击execute()方法进去,转到
然后在这一行打个断点: $rawSql = $this->getRawSql();
这里的$rawSql 就是原生sql;
这个对于增删改查都是实用的,还是要从原理出发哦

配置路由后gii找不到了[2.0]

Tinanice阅读(86)

没配置路由之前可以正常打开 http://127.0.0.1:8000/word/backend/web/index.php?r=gii

配置了路由之后 同样的路径 打不开了

http://127.0.0.1:8000/word/backend/web/gii.html
能访问不?
路由配置为path模式,试试:
http://127.0.0.1:8000/word/backend/web/index.php/gii
你的路由怎么设置的?代码贴出来。
http://127.0.0.1:8000/word/backend/web/gii
使用 showScriptName 需要你的 服务器 开启了 相应模块,比如 apache 的
详见 http://www.yiiframework.com/doc-2.0/guide-start-installation.html
gii是一个模块,你自己看看你改了路由之后是什么怎么访问模块的
http://127.0.0.1:8000/word/backend/gii.php

yii2如何引入资源文件[2.0]

Jadecrab阅读(82)

<?php
use yii\helpers\Html;
use yii\bootstrap\Nav;
use yii\bootstrap\NavBar;
use yii\widgets\Breadcrumbs;
use app\assets\AppAsset;

/* @var $this \yii\web\View */
/* @var $content string */

AppAsset::register($this);
?>
<head>
    <meta charset="<?= Yii::$app->charset ?>">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <?= Html::csrfMetaTags() ?>
    <title><?= Html::encode($this->title) ?></title>
    <?php $this->head() ?>
</head>

他是如何引入资源文件的?
用的yii2basic的layout/main.php

一切尽在Controller的render方法中,只有在控制器中render才会加载layout,在View的render方法中是不会自动加载layout
layout怎么引用进来我们已经知道了,那么在视图文件中怎么把资源注入到layout的头部或者底部呢?
每个Asset中都会用到以上这些资源注入方法,而在Layout中会有View::head()、View::beginBody()、View::endBody() 这些标记,在页面的输出<![CDATA[YII-BLOCK-HEAD]]>就这一串这样子的字符。在View::endPage()的时候就会把注入的资源全部替换到页面上的每一个标记中。至于要指定注入到某一个标记中,需要指定上面的注入资源函数的第二个参数。
AppAsset::register($this);
可以追踪下源码。大体是通过layout里的$this->head() $this->endBody() 这些方法添加进去的
刚刚研究出来,是如何引入资源文件,不过已经有高手解答了,哈哈

登录

找回密码

注册