zoukankan      html  css  js  c++  java
  • Yii2使用教程

    Yii2使用教程

     

    安装

    中文文档:http://www.yiichina.com/doc/guide/2.0/start-installation

    1,安装

    这里我直接下载归档文件,压缩包安装了。composer各种麻烦,国情你懂得。

    https://github.com/yiisoft/yii2/releases/download/2.0.2/yii-basic-app-2.0.2.tgz

    Yii 2.0 需要 PHP 5.4.0 或以上版本支持。

    解压至我的web目录  E:wampwwwibrain

    2,配置

    config/web.php 第12行

     'cookieValidationKey' => '123',//若你通过 Composer 安装,则此步骤会自动完成

     config/db.php

    复制代码
    return [
        'class' => 'yiidbConnection',
        'dsn' => 'mysql:host=localhost;dbname=ibrain',//数据库配置
        'username' => 'root',
        'password' => '',
        'charset' => 'utf8',
       'tablePrefix'=>'ib_',//表前缀,默认没有的,自己加上
    
    ];
    复制代码

     ok, 跑 http://localhost/ibrain/web/index.php

    和http://localhost/ibrain/web/index.php?r=site/index?param=value 是完整路径

    运行,看到 Congratulations! 界面了。

    看根目录目录,没有index首页文件,如果访问http://localhost/ibrain会看到目录,如果不想改host配置,那我们可以新增一个index.php咯,指向web/index.php。

    header("Location:web/index.php");die;

    入门HelloWorld

    为了弄清楚运行的机制,我们跑一个helloworld测试。

    首先看/web/index.php

    复制代码
    <?php
    
    // comment out the following two lines when deployed to production
    defined('YII_DEBUG') or define('YII_DEBUG', true);//调试模式
    defined('YII_ENV') or define('YII_ENV', 'dev');//前端的调试工具
    
    require(__DIR__ . '/../vendor/autoload.php');
    require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');
    
    $config = require(__DIR__ . '/../config/web.php');
    
    (new yiiwebApplication($config))->run();//这种写法就是5.4以上才支持
    复制代码

    执行后的默认首页,是跑到/controller/SiteController.php  下的actionIndex()去了。然后调用的/view/site/index.html

    那我现在要换掉默认控制器,在/config/web.php 中添加一句  'defaultRoute' => 'index', 这样默认控制器就是/controller/IndexControllor.php的actionIndex()了。不建议修改application.php 下的public $defaultRoute = 'site'; 框架文件最好不要修改。下面是代码

    复制代码
    <?php
    namespace appcontrollers;
    use Yii;
    use yiiwebController;
    
    class IndexController extends Controller
    {
      public function actionIndex()
        {    
            die("Hello world!!");//访问http://localhost/ibrain/index.php?r=index/index 
            //return $this->render('index');// /view/Index/index.html
        }
        public function actionHello()
        {    
            die("Hello world!!!!!");//http://localhost/ibrain/index.php?r=index/hello ,index.php可以省略。
        }
    
    }
    复制代码

     数据库操作

    上面的例子跑起来后,我想要从mysql中取点数据出来耍耍。开头我们的数据库已经配置好了名称为ibrain的数据库。

    添加一张用户表,表结构:

    复制代码
    CREATE TABLE `ib_admin` (
      `uid` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户ID',
      `gid` int(8) NOT NULL COMMENT '用户组ID',
      `username` varchar(25) NOT NULL COMMENT '账号',
      `password` varchar(100) NOT NULL COMMENT '密码',
      `nickname` varchar(100) DEFAULT NULL COMMENT '昵称',
      `sort` int(11) DEFAULT NULL COMMENT '排序',
      PRIMARY KEY (`uid`),
      KEY `group` (`gid`),
      KEY `usrname` (`username`)
    ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='用户表';
    复制代码

    下面要用yii来做CURD操作。

    yii2没有空模型,必须实体类来映射表,这点TP的ORM我比较喜欢。

    复制代码
    <?php
    // app/models/Admin.php  声明Admin模型,对应admin表
    namespace appmodels;
    use yiidbActiveRecord;
    class Admin extends ActiveRecord
    {
    
    }
    复制代码
    复制代码
    <?php
    // app/controller/IndexController.php
    
    namespace appcontrollers;
    
    use Yii;
    use yiiwebController;
    use appmodelsAdmin; //引入这个空间,下面才能调用静态方法
    class IndexController extends Controller {
        public function actionIndex() {
            //db方法可以参考yii2db下面的很多数据库操作类,非常丰富
              $res=Admin::findAll(array('gid'=>1));
               var_dump($res);

        $query = Admin::find()->asArray()->all();//如果不想要取出来的数据时对象类型,可以用asArray方法转换成数组
        var_dump($query);

    //插10条记录
            /* for($i=20;$i<=30;$i++){
              $admin=new Admin();
              $admin->gid=$i;
              $admin->username="admin".$i;
              $admin->password="admin".$i;
              $admin->nickname="findgor".$i;
              $admin->sort=$i;
              $admin->insert();//插入数据
              } */
    
            //修改
            /*$row=Admin::findOne(array("uid"=>19));//这是对于数据对象操作
              $row->username="test";
              $row->update(); */
    
            /* 删除
              $row=Admin::findOne(19);
              $row->delete();
             */
        }
    
    }
    复制代码

     下面就是yii的特色菜GII了,快速生成代码,开启和关闭可以在入口文件中指定  yii_env执行环境。

    跑:http://localhost/ibrain/web/index.php?r=gii

    可以创建很多东西,先来个模型吧,model->start

    可以预览生成的文件,使用很简单。参考:http://www.yiichina.com/doc/guide/2.0/start-gii

    1
    2
    3
    4
    5
    6
    7
    8
    9
    再来生成curd:也就是增删改查的代码,会自动生成页面。非常流弊
     
    Model Class:                appmodelsInfo
     
    Search Model Class:     appmodelsInfoSearch
     
    Controller Class:       appcontrollersInfoController
     
    View Path:                   viewsinfo

      好了,生成完后,我们可以访问一下,http://localhost/ibrain/web/index.php?r=info . 

    项目演练

    很多东西是需要在做项目中才能发现的,带着问题才能更好的学习,但切记不要一遇到问题就钻牛角尖。

    下面正式修改项目。首先把头部和尾部的修改一下吧。

    尾部在布局文件中,veiwslayoutmain.php

    <?= Yii::powered() ?> 这个在yii2BaseYii.php 465行 powered

    登陆功能:

    http://www.yiichina.com/tutorial/332

     =============================

    在curd生成的页面中,默认的显示往往不足以满足我们,所以下面来改动一下。

    看模板文件内的数据列表。

    复制代码
        <p>
            <?= Html::a('创建信息', ['create'], ['class' => 'btn btn-success']) ?>
        </p>
    
        <?= GridView::widget([
            'dataProvider' => $dataProvider,
            'filterModel' => $searchModel,
            'columns' => [
    
                'id',
                'type',
                'title',
                'keyword',
                'content:ntext',
                
                ['class' => 'yiigridActionColumn','header' => '操作', 'headerOptions' => ['width' => '100']],
            ],
           
        ]); ?>
    复制代码

    1.Showing 1-5 of 39 items.  这个统计要改成中文,在基础列表视图类widgetBaseListView.php line:190

    2.显示的标题要修改的话,可以在model写一个attributeLabels()方法

    复制代码
     public function attributeLabels()
        {
            return [
                'id' => '编号ID',
                'type' => '类型',
                'title' => '标题',
                'keyword' => '关键字',
                'content' => '内容',
            ];
        }
    复制代码

    3.要改一页显示的条数,在生成的infosearch.php中添加配置

    复制代码
     public function search($params)
        {
            $query = Info::find();
    
            $dataProvider = new ActiveDataProvider([
                'query' => $query,
                'pagination' => [
                    'pagesize' => '5',//一页显示5条数据
                ]
            ]);
    复制代码

    那么对一个单表的操作也差不多了,但是考虑后台的复杂性,往往会出现:

    1.多表关联查询后的记录 

    2.自定义搜索字段

    3.增加字段操作,比如加一个审核。

  • 相关阅读:
    与众不同 windows phone (50)
    与众不同 windows phone (49)
    重新想象 Windows 8.1 Store Apps (93)
    重新想象 Windows 8.1 Store Apps 系列文章索引
    重新想象 Windows 8.1 Store Apps (92)
    重新想象 Windows 8.1 Store Apps (91)
    重新想象 Windows 8.1 Store Apps (90)
    重新想象 Windows 8.1 Store Apps (89)
    重新想象 Windows 8.1 Store Apps (88)
    重新想象 Windows 8.1 Store Apps (87)
  • 原文地址:https://www.cnblogs.com/chengbocd/p/6125533.html
Copyright © 2011-2022 走看看