Используя Yii2, я пытаюсь создать detailView. Я хочу скрыть пустые строки, и поэтому я использую kartik-v detailview. Однако я также хочу скрыть атрибуты, если они соответствуют определенному условию. Поэтому я наткнулся на вопрос this SO, который отражает намерение моего вопроса. Однако он не отвечает на это удовлетворительно. (This question спрашивает примерно одно и то же). ПримерУсловно вставить атрибуты в View array array
<?= DetailView::widget([
'hideIfEmpty' => true, //available in kartik's detailview
'model' => $model,
'attributes' => [
'id',
'name', //cant be null, always shown
'description:ntext', //can be null, so hidden thanks to kartiks detailview
isAdmin() ? "password" :"", //an example, of course
"hypotheticalOtherField",
isAdmin() ? [
'attribute'=>'client',
'format'=>'raw',
'value'=>function($object) {
return Html::button("MyButton".$object->client);
}
] : ""
]
]) ?>
Как вы можете видеть, я хочу показать некоторые поля на основе (в этом примере), является ли пользователь администратором. К сожалению, вставляя в массив атрибутов, пустые массивы или нулевые значения, если условие не выполняется, возникает ошибка (IE The attribute must be specified in the format of "attribute", "attribute:format" or "attribute:format:label"
при вставке пустых строк)
Я полагаю, что я мог бы создать массив атрибутов следующим образом:
$attrs = ['id','name','description:ntext'];
if (isAdmin()) array_push($attrs, "password");
array_push($attrs, "hypotheticalOtherField");
if (isAdmin()) array_push($attrs, [
'attribute'=>'client',
'format'=>'raw',
'value'=>function($object) {
return Html::button("MyButton".$object->client);
}
]);
echo DetailView::widget([
'hideIfEmpty' => true, //available in kartik's detailview
'model' => $model,
'attributes' => $attrs
]);
, но тогда общий обзор с стандартным расположением кода Yii2 серьезно подорван.
Так есть какой-то способ условно вставить значения в массив, поэтому я могу сохранить кодировку Yii-стиля: эстетичный, организованный и незагроможденный? Или, может быть, значение из которого Yii2 знает, что это должно быть пропущена при создании View
Почему, по вашему мнению, массив атрибутов не очень хорош? Вы, кажется, только проблема с дизайном кода .... я отправляю aswer с вами код, соответствующий стилю yii2 и хорошей практике. см., если вам нравится – scaisEdge
«Я хочу скрыть пустые строки, и поэтому я использую kartik-v detailview» - вы можете сделать это с представлением по умолчанию, не нужно для сторонних аддонов – Coz
@Coz Так как же это сделать? Я больше не могу использовать атрибут «hideIfEmpty», потому что это атрибут kartiks, но я использую подробный просмотр kartiks из-за этого атрибута – stealthjong