YII

一、Introduction

YII,易框架。纯OOP,面向对象的,用了很多设计模式。

二、安装和使用Yii

1.        安装

不同于ci和tp等,yii提供两种安装方式,使用composer或者下载应用模版。官网推荐使用前者。根据官网指引,下载windows版的composer-setup.exe,然后安装最新的composer,根据指引下载composer.phar,放到在php.exe的同级目录,在这个目录创建composer.bat,里面写入@php "%~dp0composer.phar" %*,将php.exe添加到环境变量path,运行composer.bat,然后在cmd输入composer –v,查看是否安装成功。然后按照yii官网提示,执行php composer.phar create-project yiisoft/yii2-app-basic basic 2.0.13安装basic版的template或执行php composer.phar create-project yiisoft/yii2-app-advanced advanced2.0.13安装进阶版的,也就是hmvc版的,本质上一样,只是目录结构的复杂度的区别。目录结构中,vendor中放供应商的包,也就是第三方类包,比如yii、smarty、htmlpurifer等,在advanced的目录中,console放控制台脚本,就是cmd运行的php。另外,不同于tp等的是,yii框架的入口文件在web目录下。

2.        使用

在站点下创建项目目录,将yii的basic中所有文件和目录复制到项目目录下。

在浏览器运行项目,运行的前提是设置了config目录下的web.php中的'cookieValidationKey'=> 'K2Jpjy23ujgXhnIltznpy67pLL0ro8rD',设置密钥。

控制器命名要以Controller.php结尾,比如GoodsController.php,控制器需要设置命名空间,类名与文件名相同,方法名以action开头,类似java的ssh框架的一些命名规范,比如:

<?php

namespace app\controllers;
use yii;
use yii\web\controller;
use app\models\Blog;
class BlogController extends Controller
{
                    public function actionLst()
                    {
                                         
                    }
}

模型的命名没有规则,需要继承Model模型,如果这个模型要对应一张表,需要继承ActiveRecord。

<?php

namespace app\models;

use yii;
use yii\base\Model;

class Blog extends Model
{

}

在控制器生成模型,先引入模型,然后使用new关键字;或者不引入而是直接只用路径。引入类,非常类似java中使用类时的引入。也是yii面向对象的一个体现。

$blogModel = new  Blog;

$blogModel = new  \app\models\Blog;

视图,在views下创建与控制器名字一致的目录,比如blog,静态页以php结尾,比如lst.php。

在控制器加载视图和传数据

return $this->render('lst', [

         'name'=> 'tom',

         'age'=> '12',

]);

在视图接收数据直接使用php标签。

在yii访问的url默认是http://www.php2.com/yiiblog/web/index.php?r=blog/lst

在views下面有layout布局文件的目录,使用return会默认使用这个目录下的布局文件。

如果使用自定义的布局,可以在这个目录下创建自己的布局文件,然后在控制器中,定义布局属性,使用自定义的布局文件,比如,创建了mylayout.php的布局文件,在控制器中

//定义布局文件

public  $layout = 'mylayout';

如果不使用布局文件,可以设置public  $layout = false;或者调用renderPartial方法,

                   return$this->renderPartial('lst', [

                            'name'=> 'tom',

                            'age'=> '12',

                   ]);

注意,yii中数组的写法使用了php5.4以后扩展的写法,以中括号括住内容。

三、Yii的代码生成器

1.        准备工作

配置数据库

<?php

return [
    'class' => 'yii\db\Connection',
    'dsn' => 'mysql:host=localhost;dbname=eshopphp',
    'username' => 'root',
    'password' => '123456',
    'charset' => 'utf8',
    'tablePrefix' => 'es_',
    // Schema cache options (for production environment)
    //'enableSchemaCache' => true,
    //'schemaCacheDuration' => 60,
    //'schemaCache' => 'cache',
];

2.        进入gii页面

http://www.php2.com/yiiblog/web/index.php?r=gii

3.        生成

生成模型,crud等。

4.        在yii中显示中文

在web.config中添加

'language' => 'zh-cn',

5.        资源管理包

yii中的资源管理包,用于管理css、js等文件。比如如果需要在页面中引入样式文件。

$this->registerCssFile('index.css');

$this->registerJsFile('index.js');

四、使用Yii制作一套增删改查翻页

首先,改db.php为要使用的数据库和表前缀。

然后导入日志的模版到views/blog下,制作布局文件。

制作布局文件时推荐使用yii提供的布局的范例,因为yii提供的布局中使用了csrf,防跨站表单提交技术。

然后,把模版中的样式和js文件等复制到web目录下。

设置使用自定义的布局文件,在控制器中,public$layout = 'blog';或者在页面中,<?php$this->context->layout = 'blog'; ?>也可以在视图页设置标题

<?php 
                    //设置标题
                    $this->title = '博客别表';
                    $this->context->layout = 'blog'; ?>

1.        添加

复制add的模板到add.php。

使用gii生成日志模型。

修改生成的模型中的表单验证规则。

修改add.php的提交路径,并在form表单中添加用于csrf的隐藏域,<input name="_csrf" type="hidden"id="_csrf" value="<?= Yii::$app->request->csrfToken?>">

编写控制器

<?php
namespace app\controllers;
use Yii;
use yii\web\controller;
use app\models\Blog;
/**
 * 博客控制器
 */
class BlogController extends Controller
{
                    //定义布局文件
                    // public $layout = 'blog';

                    /*******************************************************/

                    /**
                     * 添加方法
                     */
                    public function actionAdd()
                    {
                                         if(Yii::$app->request->isPost)
                                         {
                                                             //生成模型
                                                             $model = new Blog;
                                                             //接收表单
                                                             $model->attributes = Yii::$app->request->post();
                                                             //添加时间加入模型
                                                             // $model->addtime = date('Y-m-d H:i:s');
                                                             //验证表单并且插入数据库
                                                             if($model->insert())
                                                             {
                                                                                 return $this->redirect(['blog/lst']);
                                                             }
                                                             else
                                                             {
                                                                                 var_dump($model->getErrors());
                                                             }
                                         }
                                         return $this->render('add');
                    }


                    /**
                     * 博客列表页
                     */
                    public function actionLst()
                    {
                                         $blogModel = new Blog;
                                         $blogModel = new \app\models\Blog;
                                         return $this->render('lst', [
                                                             'name' => 'tom',
                                                             'age' => '12',
                                         ]);
                    }
}

2.        翻页搜索

在模型中添加搜索翻页的方法

    /**
     * 翻页和搜索
     */
    public function search($perPage = 5)
    {
        //预查询返回一个query对象
        $query = $this->find();
        /**************************搜索*****************************/
        //设置搜索的条件
        //标题
        $title = Yii::$app->request->get('title');
        if($title)
        {
            $query->andFilterWhere(['like', 'title', $title]);
        }

        /**************************翻页*****************************/
        $page = new Pagination([
            'totalCount' => $query->count(),
            'pageSize' => $perPage,
        ]);

        /************************取数据************************/
        $data = $query->offset($page->offset)->limit($page->limit)->all();
        return [
           'data' => $data,
           'page' => $page,
        ];
    }

在控制器中调用模型中的搜索翻页方法

                   /**
                     * 博客列表页
                     */
                    public function actionLst()
                    {
                                         $model = new Blog;
                                         $data = $model->search(2);
                                         // var_dump($data);die;
                                         return $this->render('lst', $data);
                    }

3.        删除

编写控制器中的delete方法

        /**
                     * 删除方法
                     */
                    public function actionDelete($id)
                    {
                                         $model = new Blog;
                                         $model->findOne($id)->delete();
                                         $this->redirect(['blog/lst']);
                    }

表单中删除按钮

<a class="link-del"onclick="return confirm('确定删除?');"href="<?=Yii::$app->urlManager->createUrl(['blog/delete','id'=>$v['id']])?>">删除</a>

4.        修改

编写控制器的修改方法

        /**
                     * 修改方法
                     */
                    public function actionSave($id)
                    {
                                         //生成模型
                                         $model = new Blog;
                                         //先将要修改的数据放入模型
                                         $model = $info = $model->findOne($id);
                                         if(Yii::$app->request->isPost)
                                         {                                                            
                                                             
                                                             //用修改好的数据覆盖原数据
                                                             $model->attributes = Yii::$app->request->post();                                                   
                                                             //添加时间加入模型
                                                             // $model->addtime = date('Y-m-d H:i:s');
                                                             //验证表单并且修改数据
                                                             if($model->save())
                                                             {
                                                                                  return $this->redirect(['blog/lst']);
                                                             }
                                                             else
                                                             {
                                                                                 //错误信息传到页面
                                                                                 return $this->render('save',
                                                                                                      ['error' => $model->getErrors(), 'info' => $info]
                                                                                 );
                                                             }
                                         }
                                         
                                         return $this->render('save', ['info' => $info]);
                    }

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值