Yii2高级定制Gii

Programming4年前 (2020)更新 bruce
141 0
内容纲要

Yii2相关参考

Yii2开发常见问题
assetManager配置管理

模型相关概念

反向关联(Inverse Relations)

All relations with inverse
两个 Active Record 类之间的关联声明往往是相互关联的。例如,Customer 是 通过 orders 关联到 Order ,而Order 通过 customer 又关联回到了 Customer。

class Customer extends ActiveRecord
{
    public function getOrders()
    {
        return $this->hasMany(Order::className(), ['customer_id' => 'id']);
    }
}

class Order extends ActiveRecord
{
    public function getCustomer()
    {
        return $this->hasOne(Customer::className(), ['id' => 'customer_id']);
    }
}

# 来看下面代码
// SELECT * FROM `customer` WHERE `id` = 123
$customer = Customer::findOne(123);

// SELECT * FROM `order` WHERE `customer_id` = 123
$order = $customer->orders[0];

// SELECT * FROM `customer` WHERE `id` = 123
$customer2 = $order->customer;

// displays "not the same"
echo $customer2 === $customer ? 'same' : 'not the same';

我们原本认为 $customer 和 $customer2 是一样的,但不是!其实他们确实包含相同的 客户数据,但它们是不同的对象。 访问 $order->customer 时,需要执行额外的 SQL 语句, 以填充出一个新对象 $customer2。

为了避免上述例子中最后一个 SQL 语句被冗余执行,我们应该告诉 Yii customer 是 orders 的 反向关联,可以通过调用 inverseOf() 方法声明, 如下所示:

class Customer extends ActiveRecord
{
    public function getOrders()
    {
        return $this->hasMany(Order::className(), ['customer_id' => 'id'])->inverseOf('customer');
    }
}

这样修改关联声明后:

// SELECT * FROM `customer` WHERE `id` = 123
$customer = Customer::findOne(123);

// SELECT * FROM `order` WHERE `customer_id` = 123
$order = $customer->orders[0];

// No SQL will be executed
$customer2 = $order->customer;

// 输出 "same"
echo $customer2 === $customer ? 'same' : 'not the same';

参考 https://www.yiiframework.com/doc/guide/2.0/zh-cn/db-active-record

Form Layout 表格布局

_form.php 下布局

  • full-width
  • horizontal
  • inline
    <?php $form = ActiveForm::begin([
    'id' => 'Article',
    'layout' => 'horizontal', // full-width horizontal inline
    'layout' => 'default',
    'enableClientValidation' => true,
    'errorSummaryCssClass' => 'error-summary alert alert-danger',

数据小部件

https://www.yiiframework.com/doc/guide/2.0/zh-cn/output-data-widgets
Yii提供了一套数据小部件 widgets ,这些小部件可以用于显示数据。 DetailView 小部件能够用于显示一条记录数据, ListView 和 GridView 小部件能够用于显示一个拥有分页、 排序和过滤功能的一个列表或者表格。

yii\grid\DetailView 显示一条记录

非常适合用常规格式显示一个模型。

yii\grid\ListView 显示多条开箱即用

ListView 小部件用于显示数据提供者 data provider 提供的数据。 每个数据模型用指定的视图文件 view file 来渲染。 因为它提供开箱即用式的分页、排序以及过滤这样一些特性, 所以它可以很方便地为最终用户显示信息并同时创建数据管理界面。

指定itemView模板路径,可以定制化显示成Box浮动,样式定制化灵活

yii\grid\GridView 强大的后台表格管理

GridView 小部件是从数据提供者获取数据,并以一个表格的形式呈现数据。表中的每一行代表一个单独的数据项,列表示该项目的属性。

数据网格或者说 GridView 小部件是Yii中最强大的部件之一。如果你需要快速建立系统的管理后台, GridView 非常有用。它从数据提供者 data provider 中取得数据并使用 columns 属性的一组列配置,在一个表格中渲染每一行数据。

表中的每一行代表一个数据项的数据,并且一列通常表示该项的属性 (某些列可以对应于属性或静态文本的复杂表达式)。

Code Template

自定义的代码模板,可以通过Gii模块指定Alisa路径,类似@backend/myTemplates/myCrud/default

© 版权声明

相关文章

暂无评论

暂无评论...