谁一开始就是大神?

PHP 第20页

PHP

RESTFull错误要怎么返回json[2.0]

JasonLion阅读(84)

我开启了restfunll API 数据返回和验证都没有问题了,
config里也配置了

return [
    // ...
    'components' => [
        'response' => [
            'class' => 'yii\web\Response',
            'on beforeSend' => function ($event) {
                $response = $event->sender;
                if ($response->data !== null && Yii::$app->request->get('suppress_response_code')) {
                    $response->data = [
                        'success' => $response->isSuccessful,
                        'data' => $response->data,
                    ];
                    $response->statusCode = 200;
                }
            },
        ],
    ],
];

但是就是访问的路径不存在的时候,返回的还是html
因为配置里

'errorHandler' => [
    'errorAction' => 'site/error',
],

所以会去找site/error
我在 SiteController.php中写了

public function actionError(){

        return ['status'=>'fail','msg'=>'load 错误'];
        if($error=Yii::app()->errorHandler->error)
        {
            return $error;
        }
    }

提示找不到error.php view
目前金钱 只有 5

???????????

图片和分类名字段必填,且分类名唯一的rules规则,不能显式调用validate()方法[2.0]

coolbubble阅读(89)

在页面选择一张图片,点击添加按钮时,图片字段就会提示请上传一个文件,我看了下是因为显式的调用了model的validate()方法,就会出现这样的问题,如果去掉validate(),就能顺利添加分类名和上传图片,但是添加一个已经存在的分类名时,分类名的唯一性验证失效了,没有提示分类名已经存在。请问高手们怎么解决,多谢

请看我提的问题

yii2user->can()[2.0]

JimJames阅读(94)

这个方法是怎么权限判断的呀????????

can(‘权限名’)

场景问题[2.0]

MarkJames阅读(96)

model的rule这样子

[['imagefile'], 'required'],//默认所有情况
[['imagefile'],'safe','on'=>'update'],

我在controller里

    public function actionUpdate($id) {
        $model = $this->findModel($id);
        $model->scenario = 'update';
....

客户端js依然要显示imagefile必填
为嘛?使用场景了啊
比较菜,找不到相关源码

规则 不会覆盖, 所有对于这2个规则都有执行, 遇到第一个规则就是必填
你都说了默认所有场景,那不就是所有场景下required都会执行吗
执行有一个顺序 第一条 报错 后面就自动跳掉了,直接return false
看看这 http://www.yiichina.com/question/2023

关于checkbox模生成的问题[2.0]

dmlemon阅读(92)

在看一个视频,有一些不理解,html的源代码是下面这样的

QQ图片20170703174923.png

然后教程中的写法是
QQ图片20170703175429.png
测试效果和模版一样的,

但是我自己感觉像下面这种应该也可以

QQ图片20170703175655.png
经测试和模版不同,而且rememberme的英文也显示出来了,
我想问下 ,这第二种写法是错误的吗,文档里面有讲吗,我没有找到,先谢谢各位了

看下yii\widgets\ActiveField 文件里面 $template = “{label}\n{input}\n{hint}\n{error}”;
默认情况下已经包含label,input,hint,error
field默认会生成一个闭合的标签。而不仅仅是一个input

按照Yii2的写法,批量插入的前端如何实现?[2.0]

Aniapple阅读(93)

一个model的时候,前端就生成一个关于这个model的ActiveForm就可以了。

<?php $form = ActiveForm::begin(); ?>
//...
<?= $form->field($model, 'xxx')->textInput(['maxlength' => true]) ?>
//...
<?php ActiveForm::end(); ?>

如果是批量插入呢?
比如:

<div>每次点击多一个ActiveForm</div>
<?php $form = ActiveForm::begin(); ?>
//...
<?= $form->field($model, 'xxx')->textInput(['maxlength' => true]) ?>
//...
<?php ActiveForm::end(); ?>
<div>提交的时候相当于一次提交多个model实例</div>

具体的例子是这样的:添加一个商品的时候,一个商品可以对应多个规格,比如不同的颜色,不同的型号,商品是一个表,添加一个商品就是添加一条记录,规格是一个表,添加一个颜色或者一个型号就是一个记录。一次提交有一条商品信息和多条规格信息,必须一起提交到后台,然后验证,具体哪里出错了再返回到前端。
声明一下:功能我能做出来,我就是想知道,Yii2有没有应对这种场景的语法或者功能。

后台写个循环一个一个的添加,报错的就收跳过并收集错误信息。
这样行不通?
什么鬼。。。。。。。。。。。
现在我是用JQ实现的。。<input name='att_model[att_name][]' type='text' id='add_input' placeholder='请输入属性类型' />每次点击就JQ添加这个框。 然后把得到的数据遍历插入。 不懂有没有别的好方法。
好问题,jquery可以
前端提交数据数组,后台foreach,循环数组入库
入不同表数据, 多表单模型 你看下吧
http://www.yiichina.com/doc/guide/2.0/input-multiple-models,
看手册这里有
http://www.yiichina.com/doc/guide/2.0/input-tabular-input
看手册这里有
你这个添加价格、可以写个可分割的字符串、后台分割、然后循环插入
我在做这个需求,前后端同时开发。。累死我了,我就问问Yii能处理这种情况么。。

怎么用php判断远程地址是否是一个图片

ACGbubble阅读(88)

如题:怎么用php判断远程地址是否是一个图片
比如这个地址,https://mmbiz.qpic.cn/mmbiz_jpg/WRGz2LWLARA7LzK0iaW9ROpG9fA7JBgea7QdxeEESYzIewiaH58TibzzkI7ckddSAoVRbpLC6myynV1kIwtdEuPFw/640没有后缀,但是是一个图片。

file_info(保存文件)
Content-Type:image/jpeg 他的header是这个 要不就是找找判断文件流mime的
get_headers($url,1);链接是否存在,类型一步到位。。。。

Yii2的scenarios()如何理解??[2.0]

CleverLion阅读(92)

最近在使用场景的时候碰到一些不解的问题,我简单模拟下:
我新建一张表info,有name和age2个字段
模型代码:

public function rules()
{
    return [
        [['age'], 'integer'],
        [['name'], 'string', 'max' => 22],
        ['name','required','message'=>'姓名不能为空','on'=>['add','update']],
        ['age','required','message'=>'年龄不能为空','on'=>'add'],
        ['age','isMath','on'=>'add']
    ];
}

public function scenarios()
{
    return [
        'add' => ['age','name'],
        'update'=>['name']
    ];
}

当我进行编辑操作的时候,使用$model->scenario = ‘update’;也就是使用update场景,出现的结果是:name改变了age竟然没有更改,我把代码修改下

public function scenarios()
{
    return [
        'add' => ['age','name'],
        'update'=>['name','age'] //这里加个age
    ];
}

这个时候正常修改了name和age字段

还有就是我不重写 scenarios() 方法,也是正常执行验证的

所以有2个问题:
1.重写 scenarios() 方法,具体应该在什么时候?
2.上面代码加个age和不加age区别是什么?在update场景下我只验证name字段,age只在add场景下,但是在update场景下 'update'=>['name'] 没有写age就不能修改age字段?????

默认情况下,scenarios() 返回的是一个关系数组,键是模型中所有可用的场景,值是场景对应的 active attributes 列表。active attributes 有两个特点:
在你的例子中,把 ‘age’ 从 update 场景中移除意味着 age 不再是 active attribute, 这就是为什么对 age 的修改没有写入数据库的原因。
默认的 scenarios() 过程(以你的例子中声明的规则为例)
scenarios() 会进行两次遍历操作。首先遍历 rules 中声明的规则,把所有可用的场景找出来,并初始化数组,以你的例子中的 rules 为例,值为:
第二次遍历时,对每个 rule 中声明的 attributes “对号入座”,如果 rule 中不带 ‘on’ 属性,表示该属性所属的规则适用于所有场景(例如 [['age'], 'integer']), 会将 ‘age’ 追加到所有场景的 active attibutes 列表中;如果指定了场景值,仅在对应的场景下的active attributes 内追加。
经过这两次遍历,scenarios() 最终返回的值将是:
可以看到, ‘age’ 在每个场景中都是 active attribute, 这就是为什么在你不重写 scenarios() 的情况下,对 age 的修改也能保存的原因。
了解了这个过程,我的理解是:在大多数情况下,是不需要重写 scenarios() 的,通过配置 rules() 来改变 scenarios() 的返回值,而不是直接手动覆盖 sceanrios(). 覆盖带来的一个明显的弊端是:你的精力被分散到了两个方法内(rules() 和 scenarios()),假设将来你的 info 表又新增了一列,在 rules() 追加新的规则的同时,你还要修改重写后的 scenarios(), 把新增加的列追加进去使其成为 active attribute,否则就会出现新增列的数据无法存入数据库。使用默认的 scenarios() 的话,只需要将精力放在 rules() 上即可。
2、你在update场景中没有配置age当前就不能修改了。
yii是照这个清单去一个个校验的,清单上没有的东西,不处理。
我有个很大的疑惑:
这样写的话,如果我调用 ‘add’场景,那么系统应该知道我需要验证 ‘age’,’name’这两个属性;
那问题来了。
为什么还要在 rules()的age属性中开启’on’=>[‘add’]呢?
为什么要这么做?这么设计的原因是什么?
那么请问rules()函数和scenarios()函数的关系是什么?

关于Activeform显示数据[2.0]

Lvyapple阅读(94)

本人在做一个功能,保存的时候需要将两个图片路径存进一个字段里面(逗号隔开),取出来的时候,需要用到activeform搭配FileUpload组件来显示,请问如何将两个数据分别取出来呢
$form->field($model, ‘preview_img’)->label(‘预览图1’)->widget(‘common\widgets\file_upload\FileUpload’, [])
$form->field($model, ‘preview_img1’)->label(‘预览图2’)->widget(‘common\widgets\file_upload\FileUpload’, [])
preview_img1是动态添加的字段名

preview_img1preview_img2的值来自于preview_img的拆分
是不是需要在方法里面拆分开。前台来个输出就可以了吧?
比如在index方法多传一个参数!

登录

找回密码

注册