谁一开始就是大神?

PHP 第79页

PHP

where条件查询怎么写[2.0]

Wendylemon阅读(100)

两个已经关联的表
表1是hasMany,表2是hasOne,并分别由字段id 与 model_id 相关联
表2内的其中5条记录的字段model_id相同,并与表1内字段id的值相同
在表2的controller条件查询应该怎么写?我想在表2的index下显示出表2内model_id值相同的记录

这个yii也有关联的事例 http://www.yiichina.com/tutorial/96
如果是用ActiveRecord手册有说
如果你要一条sql来查就用
用这个类\yii\db\Query() 手册(类手册)有说
或者写原生sql
\yii::$app->db->createCommand($sql)->queryAll();
这问题有点莫名其妙的。
要查询表2的数据你直接查就好了。。要model_id一样 你条件直接model_id=多少,你传进去就好了。。。
要所有根据表1的id分组,你直接查表1,然后用你的hasMany就好了。每个hasMany查出来的就是model_id相同的一类了。
没看明白想说啥!

findbyusername义[2.0]

HaHfans阅读(83)

在登录的时候,使用这个静态方法,但是提示未定义

Yii::$app->user->login(static::findByUsername($this->username))

请问是因为我继承的不对吗?还是什么问题

这个方法是要自己写的~
下面是模版中的方法:
如果你使用数据库,可以用User::findOne(['username'=>$username])

Yii2微信请求配置的URL只能在index.php中取得数据,不分发到所的控制器[2.0]

Jasonelephant阅读(104)

Yii2 微信请求填写的URL的时候,我在入口文件(index.php),可以获取发送来的数据,并可以在log中查看到数据。但是发现没有分发到URL所指的控制器方法中。我在控制器方法里面获取不到数据,log也没有数据,请高手帮下忙,看下怎么回事

遇到这种情况,是因为 Yii2 的防止 csrf 攻击,你则不能多次提交相同的表单。如果你希望当前可以多次重复提交,可以在当前提交的表单 controller 中添加
我遇到的情况和你一模一样,捣鼓了一天才弄出来,你试试吧
可以直接在控制器中获取数据。你在腾讯的“微信公众平台”管理页面的“开发者中心”“配置项”指定url、token的地方,url那里填你的完整路由就好了。
可以在index.php上获取数据,那么在控制器中也是可以获取的,这个是全局的。
如你所说,获取不到,
原因可能是你访问url有问题,是不是没有访问到你的控制器里面动作。
可以看下生成的log。
index.php 后 写人session里,全局调用, 如果写不进去就是字符编码问题,或者解析json有问题.

radioList如何添加默认选中呢[2.0]

Oldlemon阅读(90)

radioList 如何添加默认选中呢

$model->loadDefaultValue();//我记得方法的名字是这样,你考虑考虑
写在控制器里面
找问题的 小伙伴少走点弯路
视图里面
默认值分两种:
1)数据库中的定义的default值,
用如下方式
$model->loadDefaultValue();
2)逻辑中定义的default值
用如下方式
$model->status=1;
<?php $model->status = 1; ?>
<?= $form->field($model, ‘status’)->textInput()->radioList( [‘1’=>’显示’,’2’=>’隐藏’] )?>

怎么判断用户是否登陆啊[2.0]

Markapple阅读(90)

新人刚做,做好登陆,不知道怎么判断是否登陆,有大神解答下吗…可以的话,尽量详细点,谢谢各位

Yii::$app->user->isGuest 说明未登录
看源码,出厂自带了此功能。
或者用session判断也可以的

$form=ActiveForm::begin()不解[2.0]

Dmhope阅读(88)

Yii2创建form表单是个常见的情景,今天偶然的机会看到from表单id的两种写法:
第一种写法:

<?php $form = ActiveForm::begin([
    'id'=>'myForm', //设置form表单id
    'method'=>'get',
    'options' => ['class'=>'form-horizontal']
]);?>

第二种写法:

<?php $form = ActiveForm::begin([
    'method'=>'get',
    'options' => ['class'=>'form-horizontal''id'=>'myForm'] //id放在属性里
]);?>

两种写法经过的源码有一点点区别,简单的来看下源码:
首先,是ActiveForm::begin()这个方法,他是在yiisoft\yii2\base\Widget.php里的begin()方法

public static function begin($config = [])
{
    $config['class'] = get_called_class();
    /* @var $widget Widget */
    $widget = Yii::createObject($config);
    static::$stack[] = $widget;
    return $widget;
}

这个方法返回的是ActiveForm(yiisoft\yii2\widgets\ActiveForm)对象,而不是Widget对象,我们打印下返回的$widget对象,看看两种情况这个对象哪里不一样var_dump($widget);

第一种id的表单写法结果是:

object(yii\widgets\ActiveForm)#56 (29) { ["action"]=> string(0) "" ["method"]=> string(3) "get" ["options"]=> array(2) { ["class"]=> string(15) "form-horizontal" ["id"]=> string(6) "myForm" } ["fieldClass"]=> string(23) "yii\widgets\ActiveField" ["fieldConfig"]=> array(0) { } ["encodeErrorSummary"]=> bool(true) ["errorSummaryCssClass"]=> string(13) "error-summary" ["requiredCssClass"]=> string(8) "required" ["errorCssClass"]=> string(9) "has-error" ["successCssClass"]=> string(11) "has-success" ["validatingCssClass"]=> string(10) "validating" ["enableClientValidation"]=> bool(true) ["enableAjaxValidation"]=> bool(false) ["enableClientScript"]=> bool(true) ["validationUrl"]=> NULL ["validateOnSubmit"]=> bool(true) ["validateOnChange"]=> bool(true) ["validateOnBlur"]=> bool(true) ["validateOnType"]=> bool(false) ["validationDelay"]=> int(500) ["ajaxParam"]=> string(4) "ajax" ["ajaxDataType"]=> string(4) "json" ["scrollToError"]=> bool(true) ["attributes"]=> array(0) { } ["_fields":"yii\widgets\ActiveForm":private]=> array(0) { } ["_id":"yii\base\Widget":private]=> string(6) "myForm" ["_view":"yii\base\Widget":private]=> NULL ["_events":"yii\base\Component":private]=> array(0) { } ["_behaviors":"yii\base\Component":private]=> NULL }

第二种id表单结果:

object(yii\widgets\ActiveForm)#56 (29) { ["action"]=> string(0) "" ["method"]=> string(3) "get" ["options"]=> array(2) { ["class"]=> string(15) "form-horizontal" ["id"]=> string(6) "myForm" } ["fieldClass"]=> string(23) "yii\widgets\ActiveField" ["fieldConfig"]=> array(0) { } ["encodeErrorSummary"]=> bool(true) ["errorSummaryCssClass"]=> string(13) "error-summary" ["requiredCssClass"]=> string(8) "required" ["errorCssClass"]=> string(9) "has-error" ["successCssClass"]=> string(11) "has-success" ["validatingCssClass"]=> string(10) "validating" ["enableClientValidation"]=> bool(true) ["enableAjaxValidation"]=> bool(false) ["enableClientScript"]=> bool(true) ["validationUrl"]=> NULL ["validateOnSubmit"]=> bool(true) ["validateOnChange"]=> bool(true) ["validateOnBlur"]=> bool(true) ["validateOnType"]=> bool(false) ["validationDelay"]=> int(500) ["ajaxParam"]=> string(4) "ajax" ["ajaxDataType"]=> string(4) "json" ["scrollToError"]=> bool(true) ["attributes"]=> array(0) { } ["_fields":"yii\widgets\ActiveForm":private]=> array(0) { } ["_id":"yii\base\Widget":private]=> NULL ["_view":"yii\base\Widget":private]=> NULL ["_events":"yii\base\Component":private]=> array(0) { } ["_behaviors":"yii\base\Component":private]=> NULL }

可以看出,结果差不多一样,关键看后面几行["_id":"yii\base\Widget":private]这个对应的值不一样,第一种的值是自己定义的id(myForm),第二种值为空,这里的_id是Widget.php里的一个属性(定义在110行左右)

begin()运行后,是运行init()方法(在yiisoft\yii2\widgets\ActiveForm):

public function init()
{
    if (!isset($this->options['id'])) {
        $this->options['id'] = $this->getId();
    }
    echo Html::beginForm($this->action, $this->method, $this->options);
}

这里的if语句不解,$this->options[‘id’])不是两种情况都有值的吗(var_dump($widget);),为什么第2种没运行进来第1种却运行进来了???

问题解决了,之前理解错了一直以为运行完begin后才会运行init的,原来是运行begin的时候会调用init的

如果你在options中没有指定id,那么框架就使用w0,w1,w2…这样的id.
首先你要理解init();在什么时候调用。
是在object创建的时候调用的魔术方法__construct();里面调用到init();
而静态方法的调用不会触发construct();
所以ActiveForm::begin();先执行begin();方法,在begin();方法中调用$widget = Yii::createObject($config);的时候,才触发
construct();调用到init();
而$this->options中options的值是在__construct();中Yii::configure($this, $config);方法设置,所以你会发现你方法1中有init();有值而2中没值。
农民和楼上的解释挺好的

Yii2.0在地测试无问题,部署到服务器后找不到js/css文件[2.0]

Slylove阅读(87)

大神同学们,经过我的反复折腾,但学习尚浅,问题还是未能解决。特请教!

本地测试均无问题,测试环境是 ubuntu14 + nginx,服务器是 CentOS 5.4。

上传后页面均能使用,但始终没有样式,firebug 报如下错误 "_NetworkError: 404 Not Found - http://***.com/study/web/assets/7feb762a/css/bootstrap.css_"

我想到可能是权限问题,修改了 runtimeweb/assets 权限为 777,依然无效。
开启调试模式也没有报错。
谢谢。

记得这个问题后来参考共享主机一节解决的。

assets 經過 hash 的檔案名稱
確定 環境內有此名稱的 folder 嗎?
(只能逐步慢慢找了)

dropDownList选中默认值问题[2.0]

Cleverelephant阅读(95)

比如当前PHP计算所得周次是第10周,那么HTML的SELECT控件应该默认选择10,且下拉选项还有1-25的值供选。

不知道怎么弄简单点,我现在用很傻的办法, 结合了JQ,有没有简洁点的方法?
jQuery("#stpointstemp-week").val('<?=$weekly?>');/*页面载入后设置当前周次*/

<?= $form->field($model, 'week')->dropDownList(['1'=>'1','2'=>'2','3'=>'3','4'=>'4','5'=>'5','6'=>'6','7'=>'7','8'=>'8','9'=>'9','10'=>'10',
	'11'=>'11','12'=>'12','13'=>'13','14'=>'14','15'=>'15','16'=>'16','17'=>'17','18'=>'18','19'=>'19','20'=>'20',
	'21'=>'21','22'=>'22','23'=>'23','24'=>'24','25'=>'25'
]) ?>

<?php $model->week = $weekly; ?>
在前面加上这句代码 <?php $model->week = $weekly; ?>

GridView格式化日期两种格式化的疑问?[2.0]

likelydolphin阅读(87)

输入图片说明

'format' => ['date', 'Y-m-d H::i::s'], 格式化时间前面2条记录错误了,而且只错了月份,而后2条记录的时间确实正确的

确认过数据库,红色框部分是正确的

求解疑惑???

'format'=>['date', 'php:Y-m-d H:i:s']
设置一下timeZone.

登录

找回密码

注册