yii2.0的學習之旅(二)

前言:上一次咱們簡單認識了一下yii2.0安裝,模型基本(增,刪,改,查)操做php

 

1、先後臺數據交互html

*若是你以爲默認的top樣式太醜,能夠這樣關掉*數組

 

*底部也能夠這樣關掉*yii2

 

(1)mvc合做操做數據mvc

控制器(c),顯示方法與接收方法app

    /**
     * 列表
     * @return string
     */
    public function actionIndex(){
        $where = array();
        $is_page = false;
        FcArticle::getConditionByList('a_id,article_title,author',$where,'a_id desc',$is_page,10);
        return $this->render('index', [
            'list' => FcArticle::$countries,
            'pagination' => FcArticle::$pagination,
            'is_page'=>$is_page
        ]);
    }

    /**
     * 添加
     * @return string
     */
    public function actionAdd()
    {

        $model = new FcArticle();
        //是否經過驗證,接受數據
        if ($model->load(\Yii::$app->request->post()) && $model->validate())
        {
            // 在model裏面編輯好規則,經過以後,操做數據入庫
            $model->insert();
            return $this->redirect('index.php?r=test/index');
        }
        else
        {
            return $this->render('add', [
                'model' => $model,
            ]);
        }
    }

    /**
     * 編輯
     * @return string
     */
    public function actionUpdate()
    {
        //是否經過驗證,接受數據
        if(\Yii::$app->request->isGet){
            $a_id = \Yii::$app->request->get('a_id');
            // Yii::$app->request->queryParams;  //get請求方式,多維數組
        }else if(\Yii::$app->request->isPost){
            $postParams = \Yii::$app->request->bodyParams; //post請求方式,多維數組
            $a_id = $postParams['FcArticle']['a_id'];
        }

        $model = FcArticle::findOne(array('a_id'=>$a_id));
        if ($model->load(\Yii::$app->request->post()) && $model->validate())
        {
            // 在model裏面編輯好規則,經過以後,操做數據入庫
            // https://www.jianshu.com/p/4d5a3a8256d3 附上網址,這裏有怎麼去掉index.php的方法
            $model->update();
            return $this->redirect('index.php?r=test/index');
        }
        else
        {
            return $this->render('update', [
                'model' => $model,
                'a_id'=>$a_id
            ]);
        }
    }

模型(m),本身在原來的基礎上封裝了一下框架

框架分頁要引用一個文件yii

use yii\data\Pagination;    //分頁類
    /**
     * 根據條件查詢多條數據
     * @param string $field 字段
     * @param array $condition 條件
     * @param string $order 排序
     * @param bool $page 是否有分頁
     * @param int $pagesize 頁數
     */
    public static function getConditionByList($field = '',$condition = array(),$order = 'a_id desc',$page = false,$pagesize = 10)
    {
        $query=self::find();
        if($page){
            self::$pagination = new Pagination([
                'defaultPageSize' => $pagesize,//每頁顯示條數
                'totalCount' => self::getConditionCount($condition),//總條數
            ]);//分頁傳參

            if(isset($field) && $field!=''){
                $query->select($field);
            }

            self::$countries = $query
                ->where($condition)
                ->orderBy($order)
                ->offset(self::$pagination->offset)//偏移量
                ->limit(self::$pagination->limit)
                ->all();//查詢到的分頁後的數據
        }else{

            if(isset($field) && $field!=''){
                $query->select($field);
            }

            self::$countries = $query
                ->where($condition)
                ->orderBy($order)
                ->all();//查詢到的分頁後的數據
        }
    }

    /**
     * 根據條件獲取總數
     * @param array $condition
     * @return int|string
     */
    public static function getConditionCount($condition = array()){
        return self::find()->where($condition)->count();
    }

    /**
     * 根據條件查詢單條數據
     * @param string $field
     * @param array $condition
     * @return FcArticle|array|null
     */
    public function getOneConditionInfo($field = '',$condition = array()){
        $query = self::find();
        if(isset($field) && $field!=''){
            $query->select($field);
        }
        return $query->where($condition)->one();
    }

視圖(v)渲染,這裏用的都是yii2.0內置的form組件post

index.php(列表)this

<?php
use yii\helpers\Html;
use yii\grid\GridView;
use yii\widgets\LinkPager;  //引用分頁link
?>
<style>
    .list{
        width: 100%;
    }
    .list .l-l,.l-l-h{
        width:100%;
        text-align: center;
    }
    .l-l-h{
        font-weight: bold;
    }
    .list .l-v,.l-h{
        border: 1px solid #0b72b8;
        display:inline-block;
        width: 150px;
        float:left;
        padding: 0px;
        margin: 0px;
        text-align: center;
    }
    .l-h{
        font-weight: bold;
    }
    .clear{ clear:both}
</style>
<?= Html::a('添加', ['test/add'], ['class' => 'profile-link']) ?>
<div class="list">
    <div class="l-l-h">
        <p class="l-h">
            標題
        </p>
        <p class="l-h">
            做者
        </p>
        <p class="l-h">
            操做
        </p>
        <div class="clear"></div>
    </div>
    <?php foreach ($list as $key=>$value){?>
        <div class="l-l">
            <p class="l-v">
                <?= $value['article_title']?>
            </p>
            <p class="l-v">
                <?= $value['author']?>
            </p>
            <p class="l-v">
                <?= Html::a('編輯', ['test/update','a_id'=>$value['a_id']], ['class' => 'profile-link']) ?>
            </p>
            <div class="clear"></div>
        </div>
    <?php }?>
        <?php
        if($is_page){ // 是否有分頁,有則顯示,無則關閉
        ?>
        <?= LinkPager::widget([
            'pagination'=>$pagination,
            //'options'=>['class'=>'hidden']//關閉自帶分頁
            'firstPageLabel'=>"首頁",
            'prevPageLabel'=>'上一頁',
            'nextPageLabel'=>'下一頁',
            'lastPageLabel'=>'尾頁',
        ])
         ?>
        <?php }?>
</div>

add.php(增長)

<?php
use yii\helpers\Html;
use yii\widgets\ActiveForm;
$form = ActiveForm::begin(['action' => ['test/add'],'method'=>'post']);
?>
<?= $form->field($model, 'article_title')->label('標題名') ?>
<?= $form->field($model, 'author')->label('做者') ?>
<?= Html::submitButton('提交', ['class'=>'btn btn-primary','name' =>'submit-button']) ?>
<?php
ActiveForm::end()
?>

update.php(編輯)

<?php
use yii\helpers\Html;
use yii\widgets\ActiveForm;
$form = ActiveForm::begin(['action' => ['test/update'],'method'=>'post']);
?>
<?= $form->field($model, 'article_title')->label('標題名') ?>
<?= $form->field($model, 'author')->label('做者') ?>
<?= $form->field($model, 'a_id')->hiddenInput(['value'=>$a_id]) ?>
<?= Html::submitButton('提交', ['class'=>'btn btn-primary','name' =>'submit-button']) ?>
<?php
ActiveForm::end()
?>

yii2.0注意事項

一、控制器方法名必須是小駝峯方式;

例如:actionFormadd,錯誤:actionFormAdd(這種是訪問不到的)

二、原本打算是用原生form標籤,可是,發現很差兼容驗證規則,因此作罷

 

相關網址

yii2表單驗證方法:https://blog.csdn.net/song_csdn1550/article/details/51004815

yii2.0 Activeform表單部分組件使用方法:http://www.javashuo.com/article/p-tnkjarbv-r.html

yii2.0 控制器方法 視圖表單 Form表單處:http://www.javashuo.com/article/p-bfvjxchb-bv.html

相關文章
相關標籤/搜索