PHPyii2开发后记

前数天准备写一个协调之博客CMS,考虑PHP框架的时刻想到了据说十分强劲的yii,接触yii时发现有2.0本,果断尝最可口的。这么一品感觉入了坑了,yii2.0凡2014年12月发布之,估计国内用的食指于少,资料比少,遇到问题百度yii2.0翻看下多1.0版本的答案,只好去google看英文站。一个不怎么题目无人提醒,又是STACK
OVERFLOW又是自己翻源码,弄了相同上多。。。可谓是藉老矣苦水。

而是网站到底是开下了,地址:http://www.alwayscoding.cn,以后博客当此站同步创新,而且,我呢可以当上面肆无忌惮之扩上协调喜爱的文章了~~另外源码也坐落了github上,地址:https://github.com/zhenbianshu/blog-cms,有思利用本CMS的自可以供支持~最后自己吧总出来了下列的施用体验,准备入手yii2.0的足看一下,留个爪。


基础总结

1.改动默认控制器/方法

yii默认是site控制器,可以在web.php中安装$config中之’defaultRoute’=’xxxx’;使用自定义默认的控制器。也堪改写Yii::$app->defaultRoute属性。

yii的默认方法是index,可以于vender/yiisoft/yii2/base/Controller.php
中开展初步设置,也足以当控制器中改写defaltAction=’action’。

2.添加独模块

yii可以于modules文件夹着上加起定义模块,添加完成后每当web.php中之$config中之’modules’=[id=..class=…]安装模块的开关。

模块一般用于一些单身的效果,像我站里的admin模块整体负责后台逻辑。

3.模型操作表设置

yii的型产生Model和ActiveRecord两种植,Model类用来处理为主的业务逻辑,没有数据库相关方法,如果只要操作同名数据表,请继承ActiveRecord类。

咱为此一个当models文件夹着之Operation.class里Operation类来继承yii\db\ActiveRecord来操作Operation表。

假定要操作其他表,也堪又写public
$tableName属性来装。或改写其tableName方法(注意是静态方法) : public
static function tableName(){return ‘tableName’}

4.视图层构成

yii的视图层使用.php文件,而且该里面的实现吗大多使用yii内置小部件的花样,如<?=
LinkPager::widget([‘pagination’=>$pagination])
?>来代表该分页类。

还要,像input这样的稍部件,用ActiveForm类来表现,yii会对每个机关进入ajax验证,其相似的微部件还放在yii\widget\里,我们还足以当这文件夹里构建从定义之略微部件类。

5.布局模式

yii会默认开启布局模式,其布局模板也view中之layout中之main.php,我们得在veder/yiisoft/yii2/web/controller.php基础类中public
$layout属性修改模板文件之配置。

咱俩还可装关闭或指定特定的layout:

  • 控制器内决定 public $layout=false/’layout’
  • 控制器成员方法外决定 $this->layout=false/’layout’
  • 视图中选择布局 $this->context->layout=false/’layout’

6.模型的中坚设置

yii的范是MVC的微处理器,它执行针对MVC逻辑的拍卖。
model的特性定义是那个中心,由于默认定义魔术点子get/set,所以可以一直以model外调用$modle->attr=’value’,对范的性质进行得/赋值。

场面设置

yii中有指向气象的概念,定义场景可以使得yii在不同的气象下回到不同之多少信息。用model的scenarios()方法来安返回数据。

我们在利用model时传入场景名 $model=new
Model([‘scenario’=>’login’]);来确定场景。

规则设置

yii中针对证明规则的概念,使用rules()方法好同样长条定义多长条规则,也得根据不同之观进行定义。外部验证时用$model->validate()方法来实行验证。

当安康模式下,要拓展安全证明,即各级一个性都要于rules里证实,如果没有特定规则,也如加加’safe’验证。否则验证失败,存入数据库也会见失败。

标签设置

在处理表单时,多用$model->attributes属性来表示所有之性。其中attributeLabels方法return一个数组用来表示看到图层中ActiveForm产生的逐条表单项的label标签

7.引用JS/CSS文件

yii中之view也下面向对象方式 ,所以引入CSS和JS文件要为此异样之法。

  • 使用$this->registerJsFile(‘js.js’)来引入js文件;
  • 使用$this->registerJsFile(‘js.js’)来引入js文件;

8.分页类的下

//在模型中计算出总数量
$count=$this->find()->where()->count();
//用总条数和设定的每页个数实例化一个yii\data\Pagination类
$page=new Pagination([totalCount' => $count,'defaultPageSize'   => 2,]);
//使用分页类的属性搜索想要的数据,并返回数据
$res=$this->find()->where()->offset($page->offset)->limit($page->limit)->all();
return [$res,$page];
//使用控制器渲染页面
$data=$model->getData();
return $this->render('index',$data);
//在视图页面中使用数据。
foreach($res as key)...
yii\widgets\LinkPager::widget([pagination=$page,prevPageLabel='上一页'])。

9.创建url

use yii\helpers\Url;
Url::to(['xxx/xxx']);
//或
Yii::$app->urlManager->createUrl('xxx.xxx')

10查看询构建器

yii里之QUERY查询语句构造器非常简单好用,它好用在范与控制器中,虽然可能会见导致模型和发明不对应,但那重组接近sql语句,使用它可随意写来复杂的sql语句而不要严格遵从yii的放到规则。

方法为:

$res=(new yii\db\Query())->select()->from()->leftJoin()->where->()->all();

内部where语句较为复杂:

where('in','id',$array)或where('id'=>$array)

现实可以查阅http://www.yiichina.com/doc/guide/2.0/db-query-builder遭逢对where方法的辨析。

11.由定义函数

yii里面由定义函数可以在vendor/yiisoft/yii2/helpers/文件夹里,新建一个XXX.php文件,然后定义一个自定义类,再定义静态方法YYY()。

采用时行使基命名空间,use
yii\helpers\XXX,然后用类似来引用基静态方法XXX::YYY()

12.提到模型

yii里面的涉及模型,用来当博时表内的平等漫漫记下时,会取出对应表的笔录。如A表外各国取出一条消息,也取出B表中跟A表对应当信息,在ModelA里定义一个getBtable方法

function getBtable()
{
    return $this->hasOne/hasMany(Btable::className,['bid'=>'aid']);
}

查询时得以用joinWith('Btable')->find();见面在查找时寻找其关系对象;也得使$this->find()等艺术结果对象

行使$res->btable来直接引用对象。

使用$res[n]->btable->attr来引用B表的照应属性。

13.利用ActiveForm创建表单

yii2中运用小部件创建view视图的步调: 设置一个Model设置其性质

public $username;
public $password;

安其rule或现象相当

public function rules(){
    return [
            [['username', 'password','conpass'], 'required'],
            ['conpass', 'password',
        ];
}

设置其label

public function attributeLabels(){
        return [
            'username' => '管理员',
            'password' => '密码',
        ];
    }

接下来于controller中将model的实例渲染进去:

$this->render('index',['model'=>(new Model/ActiveRecord)])

末尾在页面中采取ActiveForm

use yii\widgets\ActiveForm;
<?php $form = ActiveForm::begin([
    'action' => ['log/login'],
    'method'=>'post'
    ]); ?>
    <?= $form->field($model, 'username') ?>
    <?= $form->field($model, 'password') ?>
    <div class="form-group">
        <?= Html::submitButton('Submit', ['class' => 'btn btn-primary']) ?>
    </div>
<?php ActiveForm::end(); ?>

14.以验证码

在controller中设置验证码的独门方法

public function actions() {
        return [
            'captcha' =>  [
                'class' => 'yii\captcha\CaptchaAction',
                'height' => 50,
                'width' => 80,
                'minLength' => 4,
                'maxLength' => 4
            ],
        ];
    }

在model里设置rule和label,label同上

public function rules(){
    return [['verifyCode', 'captcha','captchaAction'=>'admin/log/captcha'],];
}

(captchaAction要安装也controller中之岗位,如果由定义module要装module)
在view中运用

use yii\captcha\Captcha;
<?= $form->field($model, 'verifyCode')->widget(Captcha::className(),
    ['captchaAction'=>'log/captcha',
        'imageOptions'=>
        ['alt'=>'点击换图', 'style'=>'cursor:pointer']
    ]) ?>

15.视图中块的运

片内容在$this->beginBlock([‘id’=>xxx])和$this->endBlock()之间定义,在layout中使$view->block[id]来引用。可以在好向模板被导入视图数据。

否堪定义$this->var=xxx;在layout中因故$this->var来引用。

16.更新和去

更新
//查找到一条结果
$res=$this->find()->where()->one();
//对结果修改
$res->attr='xxx';
//执行更新操作
$res->update();
删除
//删除一条数据
$this->findOne($id)->delete();
//删除所有符合条件的数据
$this->deleteAll([where]);

留意与窍门

1.URL模块间跳转

以模块中之所以Url::to()方法创建URL时,会自行在头里添加模块名,导致无法跨越反至其它模块,我们得以以字符串前补加’//’符来回到根模块,例如Url::to([‘//index/index’])表示过反到起地址。

2.初始化变量

纪念在控制器中各个一个操作前,初始化一个变量的话语不苟再次写__construct构造函数,因为它需要传入各种变量。最好又写beforeAction()函数,它见面当履行各个一个action时都实行一下。

还要注意:方法的最终必将要填补加return true语句。

3.在JS中使用YII的变量

要是想以JS中使YII的URL变量等,可以使用html中之script标签,将变量在第一破渲染视图时优先解析出,将下代码放在要动用变量的地方之前。

<script type="text/javascript">
    var key="<?=Url::to(['xxx/xxx']) ?>"
</script>

然后以JS文件中健康使用。

4.全局常量的定义

我们可以在config文件夹着的params.php中定义全局常量。

接下来于剧本中用Yii::$app->params[‘key’]来引用。

5.yii型属性转数组

YII用toArray()方法好用模型的特性转换为数组进行输出,可独自使用,也得以询问时用连续操作办法使用。

6.于利用controller渲染view页面时,一定要是以render前加echo或return 写作echo/return $this->render(‘view’,$data);

7.yii负的性能,谨记!在ActiveForm中如数据表中发出矣这字段,就不用再用public声明一个属性了,会促成attribute无法赋值。。。。(血泪)。

相关文章