美文网首页
Yii框架备忘录

Yii框架备忘录

作者: 陈走路Aston | 来源:发表于2017-03-26 22:10 被阅读32次

    一、Controller:

    <?php
    namespace app\controllers;
    
    use Yii;
    use yii\web\Controller;
    use yii\web\Cookie;
    /**
    * chen.jian
    */
    class HelloController extends Controller{
        public $layout = 'common';
        public function actionIndex(){
            // 一、请求组件
            $request = Yii::$app->request; //Yii全局类,$app静态变量,用来加载应用主体,例如request组件;
            echo $request->get("name");     //获取get方式的参数为name的值,同理post;
            echo $request->get("name", "majiali");  //获取get方式的参数为name的值,如果没有name的值,默认就是“majiali”,同理post;
            echo $request->isGet;   //是否进行了get方式的提交true Or false,同理post;
            echo $request->userIp;  //获取用户的IP地址;
    
    
            // 二、响应组件
            $response = Yii::$app->response;
            //自定义返回的状态码。但是好像不常用
            $response->statusCode = '404'; 
            //常用, 给responce相应的header头里面添加、修改、删除消息;
            $response->headers->add("pragma", "no-cache");
            $response->headers->set("pragma", "max-age=5");
            $response->headers->remove("pragma");
            //响应后跳转
            $response->headers->add("location", "http://baidu.com");
            //或者使用内置的:
            $this->redirect("http://baidu.com", 302);
            //响应后文件下载
            $response->headers->add("content-dispostion", "attachment; filename='a.jpg'");
            //或者使用内置的:
            $this->sendFile('./robots.txt');
    
            // 三、session组件
            $session = Yii::$app->session(); //此时$session是对象
            $session->isActive; //session是否开启;
            $session->open(); //开启session;
            $session->set("user", "chenjian"); //存session, 去php.ini中查找session.save_path查看session存在哪里。
            $session->get("user"); //获取session;
            $session->remove("user"); //删除session;
            //或者以数组的形式来操作session
            $session["user"] = "chenjian";  //设置session
            echo $session["user"];  //获取session
            unset($session["user"]);    //删除session
    
            // 四、cookie集合,其实属于response响应组件
            $cookie = Yii::$app->response->cookies;
            $data = array('name' => "user", 'value'=>"chenjian");
            $cookie->add(new Cookie($data));
            $cookie->remove('name');
            echo Yii::$app->request->cookies->getValue('user', "majiali"); //获取cookie的值.如果没有值那么返回的默认值就是“majiali”
    
            // 五、加载视图之传递参数
            $info = array(
                    'name'  => "chenjian",
                    'jober' => "PHPer",
                    'age'   => 28,
                    'majiali'=>['A', 'B']
                 );
            return  $this->renderPartial('index', $info);  //视图里面接受数组的一个key,例如$name;
            
            // 六、加载视图之布局文件, 对于有公用的代码,可以使用布局文件
            // 1. actionIndex方法外定义一个变量public $layout = 'common';, 表示加载布局文件
            // 2. 创建views/layouts/common.php的布局文件,里面使用 $content变量来表示render方法传递的视图;
            return $this->render('index'); //其实render()方法把视图放在$content变量里面,这个变量可以传递给布局文件。
    
            // 七、加载视图之布局文件之数据块 ------ 类似于覆
    
    
        }
    }
    

    二、View文件下的视图文件:

    2.1 普通视图文件: views/hello/index.php

    <?php
        use yii\helpers\Html;
        use yii\helpers\HtmlPurifier;
    
        // 1. 一般显示
        echo "sadasd";
        
        // 2. 加载控制器传来的数据,并且对传递过来的代码进行了处理防止代码攻击。
        // 控制器中`$data=array('name'=>'ChenJian'); return $this->render('index', $data); `
        echo Html::encode($name); //注意,使用的是数组里面的一个key
        echo HtmlPurifier::process($name);
    
        // 3. 加载另外一个视图
        echo $this->render('about');
    ?>
    

    2.2 布局文件:views/layouts/common.php

    <?php
        <!DOCTYPE html>
        <html>
        <head>
            <title>Common</title>
        </head>
        <body>
        <h1>Hello, i am Common</h1>
        <?php  echo $content; //$content来自控制器 ?> 
        </body>
        </html>
    ?>
    

    2.3 数据块:views/hello/index.php

    <!-- index.php 中定义数据块 -->
    <?php $this->beginBlock("block1"); ?>
    <h1>新的数据来代替布局文件中的数据</h1>
    <?php $this->endBlock(); ?>
    
    <!-- common.php(布局文件)中使用数据块 -->
    <?php $this->blocks['blocks1']; ?>
    

    三、数据库的使用:

    控制器中:

    <?php
    namespace app\controllers;
    
    use Yii;
    use yii\web\Controller;
    use yii\web\Cookie;
    use app\models\Hello;
    use app\models\Country;
    /**
    * chen.jian
    */
    class HelloController extends Controller{
        public function actionIndex1(){
            $sql = 'select * from country';
            $result = Hello::findBySql($sql);
            echo "<pre>";
            var_dump($result->all());
        }
    
        public function actionIndex2(){
            //防止sql注入,使用了占位符的概念,条件中name是$name的变量
            $name = "Australia";
            $sql = "select * from country where name=:name";
            $result = Hello::findBySql($sql, array(':name'=>$name));
            var_dump($result->all());
        }
    
        public function actionIndex3 (){
            // 1. name等于Australia
            $result1 = Hello::find()->where(['name' => "Australia"]);
    
            // 2. id大于6
            $result2 = Hello::find()->where(['>', 'id', 6]);
    
            // 3. id介于6和10
            $result3 = Hello::find()->where(['between', 'id', 6, 10]);
    
            $condition = array('name' => "Australia" );
            $result4 = Hello::find()->where($condition); //Object
            $result4 = Hello::find()->where($condition)->all(); //Object
            echo("<pre>");
            var_dump($result4);
        }
    
        public function actionIndex4(){
            //1. 查询结果转为数组,去除不必要的数据。
            $result = Hello::find()->where(['name' => "Australia"])->asArray(); //修正后的Array
            var_dump($result->all());
    
    
            //2. 批量查询。为了保护内存,每次查2条。
            $result = Hello::find()->asArray();
            foreach ($result->batch(2) as $t) {
                var_dump($t);   //
                echo count($t); // 依次输出22222,因为一共10条数据。
            }
        }
    
        public function actionIndex5(){
            // 1. 删除数据, 调用对象的delete方法
            $result = Hello::find()->where(['code' => 'te'])->all(); //Array
            var_dump($result[0]->delete());
    
            // 2. 删除全部,或者根据条件
            Hello::deleteAll(); //删除全部
            Hello::deleteAll('code = "te"'); //根据条件
        }
    
        public function actionIndex6(){
            //1. 增加数据并且验证
            $hello = new Hello();
            $hello->code    = "CJ22";
            $hello->name    = "chenjian";
            $hello->validate(); //验证,返回boolean
            $hello->hasErrors(); //是否有错误,返回boolean
            var_dump($hello->save());
        }
    
        public function actionIndex7(){
            //修改数据
            $result = Hello::find()->where(['code' => "CJ"])->one();
            $result->population = 888888;
            var_dump($result->save());
        }
    
        public function actionIndex8(){
            //联合查询
            $result = Hello::find()->where(['code' => "CJ"])->one();
            $data   = $result->hasMany('app\models\Country', ['c_code' => 'code'])->all();
            echo "<pre>";
            var_dump($data);
        }
    }
    

    模型中;

    <?php
    namespace app\models;
    use yii\db\ActiveRecord;
    /**
    * chen.jian
    */
    class Hello extends ActiveRecord{
        public static function tableName(){
            return 'country';
        }
        
        public function rules(){
            return [
                ['code', 'string', 'length'=>[0, 2]]
            ];
        }
    }
    

    相关文章

      网友评论

          本文标题:Yii框架备忘录

          本文链接:https://www.haomeiwen.com/subject/afkhottx.html