谁一开始就是大神?

PHP 第55页

PHP

yii2checkboxList保存问题[2.0]

Wendyslim阅读(42)

<?= $form->field($model, 'content')->checkboxList(['0'=>'篮球','1'=>'足球','2'=>'羽毛球','3'=>'乒乓球']) ?>

选择多个,但保存时只保存一个,是怎么回事呢?

手动。在保存之前.
重点是如下两行代码
$customers =Yii::$app->request->post('Customers');
//转的成字符串1,2,3以逗号分开保存在数据库中,这里可以根据情况自行处理
$hobby = implode(',', $customers['hobby']);
完整如下
不建议用楼上的方法
在模型里 写个beforeSave方法
在beforeSave方法里去分割传过来的checkbox数组

退出功能有点小问题,请教一下[2.0]

Braveelephant阅读(48)

每次退出的时候,时不时的出现“Bad Request (#400) 您提交的数据无法被验证。”,但是刷新一下就好了,搞不清是哪里有问题,希望有高人能提个醒

如果你直接用F5刷新应该也是会报错,初步判断是因为 _csrf 验证的问题,这个是为了防止攻击设置的令牌。
在配置里面
就开启了。然后POST 请求的时候就会验证你的 _csrf。
如果你用组件的话,默认是有这个的,不需要你做处理,如果是你自己写的表单,就需要在form 里面加上这个字段,如下:
<input type="hidden" value="<?php echo Yii::app()->getRequest()->getCsrfToken(); ?>" name="YII_CSRF_TOKEN" />
确认下_csrf验证
<input type="hidden" value="<?php echo Yii::app()->getRequest()->getCsrfToken(); ?>" name="YII_CSRF_TOKEN" />

'httpOnly'=>true是什么意思?[2.0]

Graceelephant阅读(44)

'identityCookie' => ['name' => '_identity-frontend', 'httpOnly' => true],

请问httpOnly指的是什么意思?

首先,要想使用这个配置,那么 “enableAutoLogin”必须为”true”, 'httpOnly' => true 的意思是: cookie是否应该只通过HTTP协议访问, 属性设置为true,该cookie不会通过脚本语言访问,设为true的目的: 它可以有效地帮助通过XSS攻击,以减少身份盗窃
看到你的问题很好奇,查了下资料。
发现这边的httpOnly是登录的时候记录cookie用的
httponly设成ture,js不能访问这个cookie

当表内没有数据时,asArray会导致出错,如何解决?[2.0]

Beelemon阅读(43)

默认情况下,用户尚未添加任何数据,这个时候浏览内容页面,将会获取表内数据。
我为了减轻内存占用,使用了asArray,却导致错误。
如何解决呢?

asArray()对空表会返回个空的数组。不会报错的。
楼主试试:(你需要把Table换成实际的model)
一个判断不就解决问题吗
避免空表出现不就行了
一般想查询结果返回数组,都是这样写的。既然你知道这样写可以,为什么还的在下面在多一个if判断呢?这不多此一举吗。
查询出来的结果,在使用之前你应该加以判断,是否为空…最好贴图上来,不然谁知道你报什么错
我考,模型还有asArray方法的?你。。。。。。确。。。。。。定。。。。。有?

yii2.0自带日志的时间问题[2.0]

lovelyFox阅读(43)

把日志存到数据库中,yii2.0把log_time存成了double格式,要怎么把它转化成 正常的时间格式?还有如果去掉catalog为application的日志?
@7VOL17IWG(QX{UR5%%FWZ8.png

要改存储的格式就修改字段,入库前做相应的调整。
不改存储,就在你显示的界面做下转换就行。

GridView::widget()的一些小疑问。[2.0]

Dmnice阅读(38)

上代码

<?= GridView::widget(['dataProvider' => $dataProvider,
    'columns' => [
        'id',
        'title',
        'created_at:dateTime',
    ],
]); ?>
<?php Pjax::end(); ?>

那句 created_at:dateTime 这句代码会执行到那里处怎么修改 我页面效果是这样的 2016年5月26日 上午11:55:00
求大神解,感谢!!!

你是想修改显示的时期格式?
如果想全局修改的,你可以在配置文件里增加formatter
反之局部的,你可以使用date
你可以为其配置 content 属性,属性的值是一个匿名函数。他看起来就像是这样子的
可以自定义输出格式的,可以把你时间的那一行改为下面的:

GridView中的$dataprovider我能用用其他方式通过里面的query取得数据吗?[2.0]

BobFox阅读(38)

可以得到里面的 query 不过不知道怎么操作这个直接得到数据(也可以转成数组就是不知道怎么直接操作,下面是复制的一部分)

yii\db\ActiveQuery Object
(
    [sql] => 
    [on] => 
    [joinWith] => Array
        (
            [0] => Array
                (
                    [0] => Array
                        (
                            [0] => biz1
                            [1] => biz2
                            [2] => biz3
                        )

                    [1] => 1
                    [2] => LEFT JOIN
                )

        )

    [select] => 
    [selectOption] => 
    [distinct] => 
    [from] => 
    [groupBy] => 
    [join] => 
    [having] => 
    [union] => 
    [params] => Array

dataProvider,顾名思义,数据提供者。
但是这个提供者还需要一个数据源。那个数据源在你这里便是$query了,但是$query仅仅只是个数据源。提供者或许还会对这个数据源进行一些处理比如默认排序,当然你的排序也可以在$query里声明,所以你最终的数据是$dataProvider提供的,而不是$query。这点切记。
对于数据提供者你可以在权威指南的 显示数据-》数据提供器 章节中得到详细的描述。
而你的需求是,在$dataProvider传入到view渲染整个view之前获取其最终结果。
以GII用yii\data\ActiveDataProvider生成的$dataProvider为例:
在视图中你可以看到如下的代码
$dataProvider是代表着最终数据的未经处理的数据源了,如果你想要提前获取其结果。
你可以在$dataProvider = 之后:
这里的$model代表着对$query分完页排完序之后的$dataProvider的最终执行结果。
它是Model实例的数组。你在处理的时候可以以foreach循环外层数组,以obj->attribute输出其属性。
所以最终的代码看起来是酱紫的:
再次强调下一个非常关键的一点:
对于数据提供者你可以在权威指南的 显示数据-》数据提供器 章节中得到详细的描述。
看看是不是你要的

Yii2.0redirect跳转[2.0]

Gracenice阅读(38)

redirect
怎样跳转到外部链接

这还需要单独提个问?
网上跳转代码一大堆。
要跳转外部链接,给个完整链接就行
http://

YII2.0和1.0目前市场上哪个用的多写。[2.0]

Anilovely阅读(45)

感觉YII确实太全面了。新手学习的话主要看YII哪块。之前是用thinkphp的

必须2.0
公司开发都会用advanced,建议自己练习也用后者
目前哪个用的多不确定,但是如果刚成立的项目,肯定是会选择YII2的。

$oModel->load()的时候会验证rules吗?[2.0]

Slydolphin阅读(48)

$oModel->load()的时候会验证 rules 吗?还是说只有加上这句 $oModel->validate()才会走验证规则呀?

load()
顾名思义,加载。为调用的模型加载从用户那传来的数据用以填充该模型。
填充的过程是不会使用rules()中声明的验证器去验证的。但是他会把没有在rules()中声明验证器的属性排除在填充之外。
举个例子:
假设你拥有 public $haha 属性。
但是你没有在rules中为$haha声明一个验证器。那么你在调用load()的时候则不会去为$haha填充数据。
即使这个数据是符合load()数据源的格式的。
而validate()的责任才是真正去检查每一个被填充了值的属性是否合法。如果不合法,则会往errors属性中填充不合法的信息并返回false。
逼都让 装完了 我看你们装逼就行了

登录

找回密码

注册