Страница 1 из 1

Преднастройка / конфигурирование переменных виджетов до вывода View php/xml/rss/twig?

Добавлено: 2017.11.23, 06:48
t9221823420
(с веткой возможно ошибся, но ИМХО это больше проектирование)

внутри View большая часть элементов отрисовывается через виджеты и код по большей части выглядит как array-портянка c вкраплениями HTML. С переходом на TWIG ситуация усугубилась невменяемыми синтаксисом этих настроек виджетов (на вкус и цвет все фломастеры разные - меня этот синтаксис просто убивает) ну и там еще пачка twig-"бонусов". Хочу вынести настройки виджетов в отдельный слой. Вижу для себя это как PreRender в настройках которого указать (php/xml/rss/twig), что отрисовывать (куда перенаправлять) настройки/конфигурацию этих виджетов. Ну т.е. хочу убрать все лишнее из View.

1) Как правильно называется этот промежуточный этап/слой (если у него есть название)?
2) Как его принято реализовывать в рамках MVxxx?

Re: Преднастройка / конфигурирование переменных виджетов до вывода View php/xml/rss/twig?

Добавлено: 2017.11.23, 07:58
ElisDN

Re: Преднастройка / конфигурирование переменных виджетов до вывода View php/xml/rss/twig?

Добавлено: 2017.11.23, 12:53
t9221823420
спасибо за ссылку - статья безусловно полезная, кое-что подчерпнул. Вопросов стало еще больше ))

Но я немного о другом. Я не про дефолтные настройки сейчас говорю, а про подготовленные данные для вывода.
Настройки полей для вывода в DetailView или GridView бывают очень непростые - иногда получется толсто. Очень хочется это из HTML.php убрать в промежуточный слой. С переходом на TWIG ситуация только усугубилась - тащить эти настройки аттрибутов в twig совсем не хочется. Т.е. надо что-то вроде:

Action->configView->renderTwig (HTML/RSS/JSON - нужное подчеркнуть) - виджеты могут быть разные и отрисовывать могут не только HTML

шаблонизатор по сути тоже является промежуточным слоем - просто синтаксис у него ... эмм ... не всегда "удобный"

Пока вижу решение только через доработаный Render

Re: Преднастройка / конфигурирование переменных виджетов до вывода View php/xml/rss/twig?

Добавлено: 2017.11.23, 15:19
ElisDN
Шаблонизаторы как раз придуманы для того, чтобы отделить программный код от вёрстки. Чтобы в них них никто не программировал анонимками и в базу данных напрямую не лез. Но Yii придумывали для быстрой разработки с GridView и Yii::$app, поэтому более осторожные подходы без статики и анонимок в нём выглядят весьма болезненно и внедряются порой с костылями.

Из GridView настройки и код анонимок убираются в классы колонок как StatusColumn в http://www.elisdn.ru/blog/76/seo-servic ... in-and-sef:

Код: Выделить всё

<?= GridView::widget([
    'dataProvider' => $dataProvider,
    'filterModel' => $searchModel,
    'columns' => [
        'id',
        'created_at:datetime',
        'email:email',
        [
            'class' => StatusColumn::class,
            'filter' => $searchModel->getStatusesArray(),
            'attribute' => 'status',
        ], 
        ['class' => ActionColumn::class],
    ],
]); ?>
и вcё остальное - в хелперы. В оригинальном Twig те же хелперы реализуются как Twig\Extension.

А так стоит подумать, есть ли смысл извращаться с анонимками в DetailView:

Код: Выделить всё

<?= DetailView::widget([
    'model' => $model,
    'attributes' => [
        'id',
        'title',
        [
            'attribute' => 'category',
            'value' => function ($model) {
                return Html::a(Html::encode($model->category), ['view', 'id' => $model->category->id]);
            },
            'visible' => $model->category !== null,
            'format' => 'raw',
        ],
    ],
]); ?>
если с шаблонизатором это же проще вывести напрямую:

Код: Выделить всё

<table class="table table-striped table-bordered detail-view">
<tbody>
    <tr><th>ID</th><td>{{ model.id }}</td></tr>
    <tr><th>Заголовок</th><td>{{ model.title }}</td></tr>
    {% if model.category %}
        <tr>
            <th>Категория</th>
            <td><a href="{{ path('category/view', {'id': model.category.id}) }}">{{ model.category.title }}</a></td>
        </tr>
    {% endif %}
</tbody>
</table>

Re: Преднастройка / конфигурирование переменных виджетов до вывода View php/xml/rss/twig?

Добавлено: 2017.11.23, 15:31
t9221823420
это все просто, понятно и согласен ... но что если:

Код: Выделить всё

'from_datetime' => $config_datetime = [
    'type' => Form::INPUT_WIDGET,
    'widgetClass' => DateControl::className(),
    'label' => 'date / time',
    'options' => [
        'type'=>DateControl::FORMAT_DATETIME,
        'widgetOptions' => [
            'layout' => '{input}{picker}',
            'options' => [ 'placeholder' => 'Select operating time ...' ],
            'pluginOptions' => [
                'todayHighlight' => true,
                'todayBtn' => true,
            ],
        ],
    ],
],
... и таких полей 20-30 штук (типичный пример - заполнение отчета) ... и отчетов этих с 10-ок и отчеты прилично отличаются, но часть полей перекликаются? ... Как оформить 30-ть разных полей с разными условиями отображения (да - я про анонимки)? для 10-ти разных моделей?

А теперь представьте это все в twig запихнуть? И сразу первый вопрос - зачем туда тащить весь этот PHP?

А потом бухгалтер звонит и говорит - нам нужен еще один такой отчет, только с датой в другом формате, потому что вот сюда он хорошо показывает, а здесь нам нужно округлить до 30-ти минут, потому что мы округляем так. И, простите, куда я должен запихнуть функцию округления для нового отчета? Она-то срать хотела на весь этот MVC - ей надо "округлить и заголовок поменять"

Re: Преднастройка / конфигурирование переменных виджетов до вывода View php/xml/rss/twig?

Добавлено: 2017.11.23, 15:43
ElisDN

Код: Выделить всё

'from_datetime' => FormHelper::dateTimeControl('date / time', 'Select operating time ...')

Re: Преднастройка / конфигурирование переменных виджетов до вывода View php/xml/rss/twig?

Добавлено: 2017.11.23, 15:46
t9221823420
ну а настройки где? $format, $value, и т.д.?

'from_datetime' => FormHelper::dateTimeControl( from_datetime_params ) - так нужно ....

где разместить настройки этого самого from_datetime_params?

Re: Преднастройка / конфигурирование переменных виджетов до вывода View php/xml/rss/twig?

Добавлено: 2017.11.23, 15:47
ElisDN
t9221823420 писал(а): 2017.11.23, 15:46 ну а настройки где? $format, $value, и т.д.?
Приведите пример с $format и $value.

Re: Преднастройка / конфигурирование переменных виджетов до вывода View php/xml/rss/twig?

Добавлено: 2017.11.23, 15:49
t9221823420
дык я же привел - код сверху.

$value может быть каким угодно сложным

Вы сейчас мне пытаетесь показать как решается конкретный кусок кода - как его в twig завернуть я и сам знаю. Я не знаю как сделать так, чтобы этого НЕ делать