Yii2:显示关联数组

时间:2017-06-27 20:11:28

标签: php arrays gridview yii2 output

在表格样式中显示关联数组的最简单方法是什么?

数组定义为

$data = [ 'name' => 'bert', 'age' => 42 ];

不需要输入验证。输出应该看起来像GridView(每行一个键/值),但GridView需要一个模型。

所以我可以使用DynamicModel,ArrayDataProvider或其他Yii2的东西。

我尝试了很多,但应该有一个简单的方法来完成这项工作。

2 个答案:

答案 0 :(得分:1)

如果你知道数组的内容

你可以这样做并使用DetailView的功能,尤其是格式化。我稍微增强了你的数据。只需将代码复制到视图文件中即可获得快速印象。

$myArray = [
   'name'             => 'bert',
   'age'              => 42,
   'My email address' => 'my-email@example.com', //no problems with spaces in the key
   'html'             => '<div style="font-size: 2em">asdf</div>',
];

echo \yii\widgets\DetailView::widget([
    'model'      => $myArray,
    'attributes' => [
        'name',
        'age',
        'My email address:email',
        'html',
        'html:html',
        'html:html:Html with different label',
        [
            'label'     => 'Html self defined',
            'attribute' => 'html', // key in model
            'format'    => 'raw'
        ]
    ]
])

属性是指模型的键。

查看here如何使用属性。

如果数组是动态的

即。如果您不了解内容并获取不同类型的数据,则可以使用DetailView默认格式(格式为&#39; text&#39;)。最简单的方式是:

echo \yii\widgets\DetailView::widget([
    'model'      => $myArray,
    'attributes' => array_keys($myArray),
]);

如果您想要或多或少地控制格式,请使用格式&#39; raw&#39;:

echo \yii\widgets\DetailView::widget([
    'model'      => $myArray,
    'attributes' => array_map(function ($key) {
        return "$key:raw"; 
        // or build some logic for the right format 
        // e.g. use '$key:email' if key contains 'email'
    }, array_keys($myArray)),
]);

关于本地化标签的答案中的要求,您可以这样做(使用默认的&#39;文字&#39;格式):

echo \yii\widgets\DetailView::widget([
    'model'      => $myArray,
    'attributes' => array_map(function ($key) {
        return $key . ':text:' . Yii::t('app', 'label-' . $key);
    }, array_keys($myArray)),
]);

但是,请注意,如果'label-' . $key不存在,则可能需要进一步的逻辑。否则 label-somekey 将显示在DetailView中。

答案 1 :(得分:0)

找到一个解决方案,甚至可以使用正在翻译的属性标签,但它是“最简单的”吗?

在控制器文件中:

class MyDynModel extends \yii\base\DynamicModel {
    public function generateAttributeLabel($name) {
        return Yii::t('app','label-'.$name);
    }
}

class MyController extends Controller {
    public function actionShow() {
        $data = [ 'name' => 'bert', 'age' => 42 ];
        $dataModel = new MyDynModel($data);
        return $this->render('myview', ['dataModel'=>$dataModel]);
    }
}

在视图文件“my / myview.php”中:

echo \yii\widgets\DetailView::widget(['model'=>$dataModel]);

在翻译文件“messages / en / app.php”中:

return [
    'label-name' => 'Name',
    'label-age' => 'Age (in Years)',
];
相关问题