yii2.0的学习之旅(二)

前言:上一次我们简单认识了一下yii2.0安装,模型基本(增,删,改,查)操作

 

一、前后台数据交互

*如果你觉得默认的top样式太丑,可以这样关掉*

 

*底部也可以这样关掉*

 

(1)mvc合作操作数据

控制器(c),显示方法与接收方法

    /**
     * 列表
     * @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),自己在原来的基础上封装了一下

框架分页要引用一个文件

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组件

index.php(列表)

<?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注意事项

1、控制器方法名必须是小驼峰方式;

例如:actionFormadd,错误:actionFormAdd(这种是访问不到的)

2、本来打算是用原生form标签,但是,发现不好兼容验证规则,所以做罢

 

相关网址

yii2表单验证方法:https://blog.csdn.net/song_csdn1550/article/details/51004815

yii2.0 Activeform表单部分组件使用方法:https://www.cnblogs.com/ymk0375/p/6285217.html

yii2.0 控制器方法 视图表单 Form表单处:https://www.cnblogs.com/jiufen/p/5086162.html

posted @ 2019-10-14 17:41  FcLwYf  阅读(211)  评论(0编辑  收藏  举报