yii\base\BaseObject 这个类,是 yii2 里最顶端的父类,它提供了属性这一个概念,具体可以看官方文档

类的配置就是遵循属性这一个概念的,其实我觉得官方文档就说得很明白了,所以本文就不重复讲这些内容了,只讲些可能需要注意的点。

平时用到的类的父类最好都看一下,这样你才知道你这个类到底拥有什么功能。yii2 的源码里有大量注释,甚至可以不看 api 文档了,建议学会用 IDE 提高学习效率。

验证器

首先,规则的写法如下:

public function rules()
{
    return [
        [
            ['属性1', '属性2', ...],
            '验证器名或类的完全限定名称',
            '验证器属性1' => '值',
            '验证器属性2' => '值',
            // ...
        ],
        [
            '属性',
            '验证器名或类的完全限定名称',
            '验证器属性1' => '值',
            '验证器属性2' => '值',
            // ...
        ],
    ];
}

可能有些同学只用过验证器名,没用过完全限定名称,其实只要去看看 yii\validators\Validator::$builtInValidators 就知道是什么意思了:

/**
 * @var array list of built-in validators (name => class or configuration)
 */
public static $builtInValidators = [
    // ...
    'date' => 'yii\validators\DateValidator',
    'default' => 'yii\validators\DefaultValueValidator',
    'double' => 'yii\validators\NumberValidator',
    'each' => 'yii\validators\EachValidator',
    'email' => 'yii\validators\EmailValidator',
    // ...
];

也就是说,以下两种用法是等价的:

use yii\validators\EmailValidator;

public function rules()
{
    return [
        [
            ['email'],
            'email',
            'skipOnEmpty' => false,
        ],
        [
            'email',
            EmailValidator::className(),
            'skipOnEmpty' => false,
        ],
    ];
}

接下来,验证器属性就不用多说了吧?直接去看对应的类的属性就好了。

GridView

use yii\grid\ActionColumn;
use yii\grid\GridView;
use yii\grid\SerialColumn;
 
echo GridView::widget([
    'dataProvider' => $dataProvider,
    'filterModel' => $searchModel,
    'columns' => [
        ['class' => SerialColumn::className()],
        
        [
            'attribute' => 'id',
            'headerOptions' => ['width' => 80],
        ],
        'name',
        [
            'label' => '生日',
            'attribute' => 'brithday',
            'format' => 'date',
        ],

        ['class' => ActionColumn::className()],
    ],
]);

如果看过 yii\grid\GridView 的属性的话,你会发现 yii\grid\GridView::$dataColumnClass 告诉你 yii\grid\GridView::$columns 里每一项默认都是 yii\grid\DataColumn 这个类,所以在以上示例的 columns 里有些内容没有显式配置 class,如果需要显示行号可以使用 yii\grid\SerialColumn,如果需要一些操作按钮的话,则可以用 yii\grid\ActionColumn

ActiveForm

use yii\widgets\ActiveForm;

$form = ActiveForm::begin([
    'fieldClass' => 'yii\widgets\ActiveField',
    'fieldConfig' => [
        'template' => "{label}\n{input}\n{hint}\n{error}",
        'inputOptions' => ['class' => ['form-control']],
    ],
]);

// 直接输出一个 mobile 的 input
echo $form->field($model, 'mobile')->textInput(['type' => 'number']);

// 直接输出一个 name 的 input,且修改它的 template
echo $form->field($model, 'name', [
    'template' => "{label}\n{input}\n{error}",
])->textInput(['maxlength' => true]);

// 取得一个 description 字段的 ActiveField 对象
$field = $form->field($model, 'description');
// 修改它的 class
$field->inputOptions = ['form-control', 'input-sm'];
// 它是一个 text 的 input
$field->textInput();
// 输出 input
echo $field;

ActiveForm::end();

上面演示了3个字段的 input 的输出,爱动脑的你一定看出来了,yii\widgets\ActiveForm::field() 方法返回一个 yii\widgets\ActiveField 对象,然后这个对象你有3种方法可以配置它。