Yii2 DetailView:使用函数的属性值

Dee*_*amy 5 php yii2

当我使用函数获取属性的值并且它使用Gridview正常工作时,我收到错误.我做错了什么?

<?= DetailView::widget([
    'model'      => $model,
    'attributes' => [
        [
            'label'  => 'subject_type',
            'value'  => function ($data) {
                return Lookup::item("SubjectType", $data->subject_type);
            },
            'filter' => Lookup::items('SubjectType'),
        ],
        'id',
        'subject_nature',
    ],
]) ?>
Run Code Online (Sandbox Code Playgroud)

beg*_*ner 14

我遇到过这种问题.错误是

PHP Warning – yii\base\ErrorException htmlspecialchars() expects parameter 1 to be string, object given

我所做的是像这样在模型中传递函数.

function functionName($data) {
     return Lookup::item("SubjectType", $data->subject_type);
},
Run Code Online (Sandbox Code Playgroud)

然后在你的view.php文件..

  [
            'label'=>'subject_type',
            'value'=>$model->functionName($data),
  ],
Run Code Online (Sandbox Code Playgroud)


Dee*_*amy 12

Fabrizio Caldarelli,于2015年1月5日 - 03:53 PM说:是的,因为'value'属性是一个真正的价值或属性名称,正如doc所说

所以你的代码应该是:

<?= DetailView::widget([
    'model' => $model,
    'attributes' => [
        [
            'label'  => 'subject_type',
            'value'  => Lookup::item("SubjectType", $model->subject_type),
            'filter' => Lookup::items('SubjectType'),
        ],
        'id',
        'subject_nature',
    ],
]) ?>
Run Code Online (Sandbox Code Playgroud)


Ale*_*uev 12

只需使用call_user_func()

<?= DetailView::widget([
    'model'      => $model,
    'attributes' => [
        [
            'label'  => 'subject_type',
            'value'  => call_user_func(function ($data) {
                return Lookup::item("SubjectType", $data->subject_type);
            }, $model),
            'filter' => Lookup::items('SubjectType'),
        ],
        'id',
        'subject_nature',
    ],
]) ?>
Run Code Online (Sandbox Code Playgroud)