谁一开始就是大神?

PHP 第101页

PHP

控制器命名大写就报错为啥?[2.0]

Jasonlemon阅读(28)

我看权威指南上看到 控制器命名的例子为
例子:操作 ID create-comment 相当于方法名 actionCreateComment。

但是我写的时候 命名了一个 actionTestForm(){} 控制器就报错404 说找不到页面。
然后改成actionTestform(){} 就可以访问页面了

测试了多次 发现是第二个单词不能大写 这是啥原因?

可以大写, 只是你请求的时候是 index.php?r=controller/action-action 这种形式。然后你的控制器就可以直接写驼峰啦
比如
可以大写的,你的action就是create-comment,驼峰式明明会被-隔开
你是怎么去请求的时候报错呢?

数据库查询需要的字段[2.0]

OldJames阅读(28)

目前我数据表有十多个字段,有 id、name、description、content、create_time、uid、status等 ,用 Category::find()->all(); 的话,会把所有的字段都查询出来, 但我只需要 id、name、uid 这三个字段,用什么办法只查询我要的这三个字段

这样
不知道2.0版本中有没有scope,如果有的话,加上经常性使用这三个字段,建议使用,一劳永逸

下拉分页,出现相同的数据[2.0]

Bravecrab阅读(28)

目前项目需要做一个下拉滑动分页,按照正常的分页思路出现了一个问题;就是在滑动的时候,有新的数据出现,分页显示的数据就会重复出现。大家在做下拉滑动拉取数据的时候是怎么做的? 求大神分享思路。

我的猜想是:你在下拉的过程中有新的数据插入,所以下一页的数据会有上一页部分数据。
传分页参数没传过去吧

公共数据库操作开发思路是什么样的[2.0]

Leobubble阅读(27)

各位大神,小弟yii2新手,有个问题请教大家
我的项目中有一个表,几乎其他的所有操作都需要向这个表里插入数据。我想写一个公共的方法,在其他控制器中调用这个方法就行了。
我的菜鸟思路一:为这个表建一个控制器,在控制器里写一个方法。其他控制器调用这个控制器里的方法
我的菜鸟思路二:在helper里写一个公共类,在公共类里写一个插入数据库的方法。然后其他控制器调用helper里的这个方法(这个思路貌似行不通,helper里操作数据库总报错)。

我的思路貌似都比较幼稚,请教各位大神正规的解决方案是什么样子的,多谢多谢。

写一个Model基类,其他数据模型继承它,在基类里写一个公共方法,这样其他继承的模型都可以调用此方法了。
我觉得应该是 写一个controller基类,这个类继承afterAction(),在这里写你要做的操作,然后让需要记录操作的控制器继承自你自定义的基类,即可。

多个模型同时提交,如何收集表单数据?[2.0]

NeoEagle阅读(34)

先说我想问什么,现在有一个表格,比如商家登记要卖的商品:
商品名称 商品种类 数量
手机 电子产品 2
电脑 电子产品 1
书籍 书籍 10
这个表单如上已经填写好,现在提交后如何同时写入三条记录到数据库?
并且不一定仅仅是三条,要实现用户点击“添加”按钮就会多一行表单。
我的代码问题在哪里?
控制器:

public function actionRelease() 
    {
        $model = new Seller();
        $goods=[new Goods()];
        $count = count(Yii::$app->request->post('Goods', []));
        for($i = 1; $i < $count; $i++) {
            $goods[] = new Goods();
        }
        if ($model->load(Yii::$app->request->post()) && $model->validate()) {
            $model->save(); 
            if (Model::loadMultiple($goods, Yii::$app->request->post()) && Model::validateMultiple($goods)) {
                foreach ($goods as $good) {
                    $good->release_date=  date('y-m-d',time());
                    $good->seller_id=$model->id;
                    $good->save(false);
                }
            return $this->render('release-confirm');
            }
            return $this->render('release-wrong');
        } else {
            // 无论是初始化显示还是数据验证错误
            return $this->render('release', ['model' => $model,'goods'=>$goods]);
        }
    }

视图:

<?php
use yii\helpers\Html;
use yii\widgets\ActiveForm;
//use kartik\select2\Select2;
?>
<?php $form = ActiveForm::begin(); ?>
<?= $form->field($model, 'name'); ?>
<?= $form->field($model, 'gender')->dropDownList(['男'=>'男','女'=>'女']) ?>
<?= $form->field($model, 'student_number') ?>
<?= $form->field($model, 'mobile') ?>
<?= $form->field($model, 'if_big')->dropDownList(['有'=>'有','没有'=>'没有']) ?>
<?= $form->field($model, 'if_alipay')->dropDownList(['是'=>'是','否'=>'否']) ?>
<?= $form->field($model, 'if_present')->dropDownList(['是'=>'是','否'=>'否']) ?>
<?= $form->field($model, 'sell_time')->dropDownList(['全天'=>'全天','上午'=>'上午','下午'=>'下午']) ?>

<?php
foreach ($goods as $index => $v) {
    echo $form->field($v, "name[]")->label($v->name);
    echo $form->field($v, "cate[]")->dropDownList(['书籍'=>'书籍','生活用品'=>'生活用品','电子产品'=>'电子产品','其他'=>'其他'])->label($v->name);
    echo $form->field($v, "number[]")->label($v->name);
}
?>


<div class="form-group">
    <?= Html::submitButton('Submit', ['class' => 'btn btn-primary']) ?>
</div>
<?php ActiveForm::end(); ?>

模型数据如下:

<?php

namespace app\models;

use yii\db\ActiveRecord;
/**
 * LoginForm is the model behind the login form.
 */
class Goods extends ActiveRecord
{
    public static function getDb()
    {
        return \Yii::$app->db2;  
    }
    /**
     * @return array the validation rules.
     */
    public function rules()
    {
        return [
            // username and password are both required
            [['name', 'cate','number'], 'required'],
            // rememberMe must be a boolean value
            ['name', 'string','length'=>[1,10]],
            ['number', 'number'],
        ];
    }
    public function getSeller()
    {
        return $this->hasOne(Seller::className(), ['id' => 'seller_id']);
        //'id'是表seller里面的,'seller_id'是本表里面的
    }
    public function attributeLabels() {
        parent::attributeLabels();
        return [
            'name'=>'名称',
            'cate'=>'种类',
            'number'=>'数量',
            'sell_time'=>'登记时间',
            
        ];
    }
}

和:

<?php
namespace app\models;
use yii\db\ActiveRecord;

class Seller extends ActiveRecord
{
    public static function getDb()
    {
        return \Yii::$app->db2;
    }
    /**
     * @return array the validation rules.
     */
    public function rules()
    {
        return [
            [['name', 'gender','student_number','mobile','if_alipay','if_present','if_big','sell_time'], 'required'],
            ['name', 'string','length'=>[1,5]],
            ['student_number', 'number','min'=>0,'max'=>9999999999],
            ['mobile', 'number','min'=>0,'max'=>99999999999],
        ];
    }
    
    public function attributeLabels() {
        parent::attributeLabels();
        return 
        ['name'=>'姓名',
        'gender'=>'性别',
        'qq'=>'qq(选填)',
        'wechat'=>"微信(选填)",
            'student_number'=>'学生号',
            'major'=>'专业(选填)',
            'grade'=>'年级(选填)',
            'mobile'=>'手机号码',
            'if_big'=>'是否有大件商品',
            'if_present'=>'6.3号当天是否能亲自到场摆摊',
            'if_agent'=>'是否同意将书籍放入书籍专区,由工作人员售出',
            'if_together'=>'是否同意与他人合摊',
            'if_alipay'=>'是否同意用支付宝付款',
            'if_donate'=>'是否同意将未售出物品捐赠',
            'sell_time'=>'摆摊时间',
        ];
    }
    public function getGoods()
    {
        //建立一对多关系
        return $this->hasMany(Goods::className(), ['seller_id' => 'id']);
    }
    
}

官方文档我在看,这部分在开发中。求大牛解,我们比比速度。


这里有个Yii1的教程,你先参考一下:
http://www.yiichina.com/tutorial/9
视图:
感谢分享代码,在你的代码的基础上,我可以实现新增的时候一次插入多条数据。在网上找了js代码实现了点击‘新增一行’和‘删除’一行的功能。但是在更新数据的时候遇到了麻烦,如何在更新的时候,对新增加的行数据进行保存,而对删除了的行数据进行删除呢?
不知道你有没有已经解决了我遇到的问题?
但是rule验证是个问题,比如动态新增的文本框的值,如果为空值时,在多模型下validateMultiple()会返回全部错误,不知道题主怎么解的,目前研究出来的也只是通过开启表单ajax验证来解决这个rule的问题。
参考:
https://github.com/yiisoft/yii2/issues/9811
https://github.com/yiisoft/yii2/issues/1399
不错,学习了
field($v, “[{$index}]name”)

field($v, “{$index}name”),请问这两种写法谁是正确的?新手表示看不懂,这里的{}、[]应该怎么理解?
用来标识下表的,用field($v, ‘[‘.$index.’]name’)才可以。

YiiSRBAC中的bizrule應該如何使用[1.1]

Fionasuper阅读(30)

已經安裝好srbac。現時有一個問題是:如果有一筆記錄是user001建立,那麼我想只能user001才可以更新或者刪除這一筆記錄,請問這個要如何實現,是不是要用bizrule,我試過在bizrule輸入 “return Yii::app()->user->id==$params["record"]->username;” 就顯示 Error:403 ‘你無權運行’。網上查的很久,可是好像很少人有詳細的解答。如果不用bizrule,還有甚麼辦法嗎? 謝謝

其中’t_’代表task,’o_’代表operation。

验证码不显示

loveFox阅读(31)

mac 升级10.10 自带5.5的php 验证码不显示

是因为osx 10.10自带的php5.5的gd扩展不支持png,验证码是png图片,所有就不支持了。
解决方案:可通过brew安装php5.5即可
以下是复制过来的,你也可以自己google

在注册的时候怎么判断用户已经是否存在,并把错误信息显示出来?求解![1.1]

Cleverdolphin阅读(31)

控制器:
//登录

public function actionLogin()
{
    
    $this->layout="//layouts/column3";
    $model=new LoginForm;

    // if it is ajax validation request
    if(isset($_POST['ajax']) && $_POST['ajax']==='login-form')
    {
        echo CActiveForm::validate($model);
        Yii::app()->end();
    }

    // collect user input data
    if(isset($_POST['LoginForm']))
    {   

        $model->attributes=$_POST['LoginForm'];
        $model->password = md5($_POST['LoginForm']['password']);
        // validate user input and redirect to the previous page if valid
        if($model->validate() && $model->login()) {
            //var_dump(yii::app()->user->getState('userName'));exit();
            if((yii::app()->user->getState('isAdmin'))==true) {
                $this->redirect(array('meeting/index'));
            }
            $this->redirect(Yii::app()->user->returnUrl);
        }
    }
    // display the login form
    $this->render('login',array('model'=>$model));
}

//注册

public function actionCreate()
{

    $this->layout = '//layouts/column3';
    $model=new Person;

    
    // Uncomment the following line if AJAX validation is needed
    // $this->performAjaxValidation($model);

    if(isset($_POST['Person']))
    {
        $model->attributes=$_POST['Person'];
        $model->password = md5($_POST['Person']['password']);
        $model->repeat_password = md5($_POST['Person']['repeat_password']);
        $model->state = 1;
        if($model->save())
            $this->redirect(array('login'));
    }

    $this->render('register',array(
        'model'=>$model,
    ));
}

注册的时候,只需要将 username 字段的 验证规则设置为 unique 即可。意思就是说要此字段的值唯一
请用markdown重新编辑

用views中设置决使用哪个layout[2.0]

Jimtom阅读(29)

想法如下:
有时候我觉得用views中的参数来决定用哪个layout
这样子该怎么做呢?

frontend/views/page/default.php
$this->layout='main'; 报错

<?php
//include("../layouts/main.php");
?>
报错

该怎么做呢?

原则上,视图应该是先渲染的,所以理论上可以做到在视图中再决定使用什么母版,我想你应该在视图中这样做:
因为在视图里,$this是指视图对象,而非控制器对象,这个是YII2.0的变化之一。
layout是要在controller里面设置的一个变量!
这样可以实现吗?

登录

找回密码

注册