谁一开始就是大神?

PHP 第97页

PHP

这样义组件有没有问题[2.0]

kenapple阅读(82)

假设有这么一个发送手机短信的组件需求
第一步先建立一个组件
common/components/ShortMsgService.php

<?php
class ShortMsgService {
    public $accessKey;
    public function send($phone,$message){
        echo $this->accessKey , $phone , $message;
    }
}

第二步配置加载组件
common/config/main.php

'ShortMsgService' => [
    'class' => 'common\components\ShortMsgService',
    'accessKey' => 'accessKey Here',
],

第三步在控制器中尝试使用组件

$sms = Yii::$app->ShortMsgService;
$sms->send('18588888888','Are you ok');

舰长的每个回答都可以给分的功能正在研发,大家敬请言无不尽,感谢哈

基本就是这么个意思吧,yii结构很灵活的
我感觉这样写没问题。

YII2接收序列化的数组[2.0]

lovelyyak阅读(86)

下面的是POST接收到的数据

Array
(
    [_csrf] => MWhSQ3N3M0MGDgsoHz5jdW4mBwhHOUAuWiYHNkAtcRMGIBEFAiFsMw==
    [Dynamic] => Array
    (
        [type] => 1
        [title] => 这是标题
        [images] => Array
            (
                [0] => http://f.cloud.com/143401345875600900.jpg
                [1] => http://f.cloud.com/143401345242854600.jpg
                [2] => http://f.cloud.com/143401345054916700.jpg
                [3] => http://f.cloud.com/143401345542255100.jpg
            )

        [content] => 这是内容
        [url] => 
    )

) 

这个是action的代码

public function actionUpdate($id)
{
    $model = $this->findModel($id);

    if ($model->load(Yii::$app->request->post()) && $model->save()) {
        return $this->redirect(['view', 'id' => $model->id]);
    } else {
        return $this->render('update', [
            'model' => $model,
        ]);
    }
}

images 是 text 类型,需要储存多张图片。
问题是:YII2 有没有自动序列化的功能并且储存到字段

如果没有怎么将序列化后的images赋值给POST

群里的回答:
程涛:
1 是写在rule里
2 写在beforsave

我来了,正如我轻轻的来,不带走一片云彩。
$model->load(Yii::$app->request->post()) && $model->save()
这么写直接就是将post的值直接就存入了数据库,说好的$model->validate();进行安全过滤呢?
虽然在save前会自动进行参数合法性过滤的。
对于rules规则自动过滤法则还没研究透,但有一个场景是肯定的,那就是对要存储的值设定个默认值,比如会员的开启状态,在会员注册场景的时候在rules规则里面进行某字段比如 status,将其设定为1。这个在rules规则里面设定毫无疑问。
就楼主的需求来看,个人感觉是,完全可以写在控制器里面了。
看完了另外一个问题才看到该问题,就顺便回答了。
希望解决你的问题!
我是鬼鬼,鬼一浪人是也!20150612
虽然我不会但是我来看一下
重写afterValidate()方法应该可以做到
这样也可以。
save() 方法保存之前,你先用一个分隔符号拆分 images 属性不就好了吗?
model里的beforeSave($insert)用过么?骚年
个人对于这种数据的分割合并处理,都是卸载beforeSave里头的。不在action里头处理这些。
好高深的样子,涨姿势了
都说这么高深,那还让小白怎么活,帖出来beforeSave 如何解决的
版主,你这个问题怎么解决的哈,遇到跟你类似的问题了,求指点

组件中的JS引用问题[2.0]

CandyLion阅读(78)

1、做为一个组件怎么让JS显示到VIEW里
2、怎么让JS只显示一次在VIEW里
提供示例代码是最好 。

使用 asset 类进行管理 js 文件

yii2进行页面跳转的时候带点提示信息

Noblequeen阅读(87)

yii2 redirect进行页面跳转的时候, 可以像页面传递数据?比如下面的代码

return $this->redirect(['member/security']);

我一般是操作数据库后进行跳转,到底操作成功否? 我想带个提示信息给页面,让页面显示一下然后提示信息就没了?
该怎么办?
我现在的做法是将提示信息存放到session中,然后跳转后用了一次就删掉! yii2中有更好的办法?

使用yii的flash数据,其实他也是session,哇哈哈哈哈!
为了保留一个完整的request-response流程,建议还是使用return response对象的方法。不过还有一种折中的办法就是封装一个显示信息的中间页,把你要显示的信息和url传过去,等显示完信息后,再跳转到目标地址。
不过我还是建议使用flash数据的方法。
return $this->redirect(['member/security', 'id' => 1]); 这样不行吗?
高级模板下可以直接使用这个:
基础模板我没用过,不知道它那里有没有高级模板下 frontend/widgets/Alert.php 这个小插件,有的话也是可以用的。
$this->redirect( Yii::$app->getUrlManager()->createUrl(‘url’));
综合@shiyang和@nomeore两位大大的答案完成了需要的效果,感谢
return $this->success([‘/admin/index’]);

这个表单如何写成widget形式的,搞不啊,总是变形!求大神搭救![2.0]

DmLion阅读(88)

<fieldset>
<form class="subscriptionForm" method="post">
     <input id="subscriptionForm" class="inputForm" type="text" value="Enter Your Email Address" onFocus="if (this.value=='Enter Your Email Address') this.value=''" onBlur="if (this.value==''){this.value='Enter Your Email Address'}" />
     <input type="submit" id="submitButton" class="transition" value="Send">
</form>					
</fieldset>

最好是上传一张图片为最佳

如何不用registerJs直接在view里写js[2.0]

Jasonqueen阅读(80)

资源包里的js文件都是加载在尾部的,启用了layout。这样我在view里直接写javascript就在出现在引入其他js文件前面,导致无效,用registerJs格式又不好整,求办法!

想加载在头部,给你个例子,注意$jsOptions
那就用registerJsFile

yii\db\ActiveRecord::link()怎么用的?[2.0]

Fionasuper阅读(90)

官方文档没怎么看懂……

如果你在class Order里定义了一个class Customer的关联(如order表里有一个customer_id的字段),在创建Order记录的时候,可能会有类似这样的执行:
如果在Order类里定义过外键关联(如下),那就可以通过link方法用面向对象的方式来给customer_id赋值:
之前创建Order对象的语句就变成:
这里link的作用只是将外键的值填到对应字段,但如果外键关联是通过中间表来实现的,那link会自动创建中间表记录。比如
有order表,item表,order_item表来存储order和item的关联。参考Relations via a Junction Table
如果在Order类里定义过外键关联如下:
那就可以通过link方法来关联Item对象:
order_item表中会自动创建一条order_id为$order->id, item_id为$item->id的记录
外键关联的,则会在外键赋值后会自动保存数据

关于服务器端防止短时间内重复提交的问题[2.0]

Slybubble阅读(81)

大家好,测试了一天,实际收效甚微。
具体controller如下。

public function actionCreate() {
    $session = Yii::$app->session;
    $sessionKey = Yii::$app->user->id . '.issending';
    Yii::warning(isset($session[$sessionKey]));
    if (!isset($session[$sessionKey])) {
        $session[$sessionKey] = microtime();
        Yii::warning($session[$sessionKey]);
        $model = new book();
        $model->load(Yii::$app->request->post());
        if ($model->save()) {
            \Yii::$app->getSession()->setFlash('info', '新增完成');
        } else {
            \Yii::$app->getSession()->setFlash('error', '新增失败');
        }
    }
    unset($session[$sessionKey]);
    $this->redirect(['index']);
}

作用是来防止段时间内重复提交的。

但是在我在前台 快速双击 提交按钮后,依然会产生2(或实际点击次数)条一样的数据
日志文件中 因为 Yii::warning(isset($session[$sessionKey])); 查产生的内容 全部为false。

客户端的js屏蔽按钮,已经实现(本测试中取消了屏蔽用来模拟客户端屏蔽js的情况)。
model部分unique的规则也已实现。(本测试中取消了unique规则,模拟实际上确实容许重复的情况)
不知道大家是否有什么好的方法,来避免重复提交。

谢谢大家。

可能的原因是unset($session[$sessionKey]);在你的第二次POST请求到达之前就执行了,所以session机制不好使。如果在不用unique规则、不用table的key冲突、也不用js屏蔽button的前提下,想在服务器端避免重复insert,可以在book中重载ActiveRecord的beforeSave方法,在里面查重,根据情况返回true/false。
表示我也遇到这中问题

登录

找回密码

注册