Свой хелпер, но не виджет (мучают сомнения в правильности своего подхода)

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
kutsanov
Сообщения: 165
Зарегистрирован: 2012.02.08, 15:22

Свой хелпер, но не виджет (мучают сомнения в правильности своего подхода)

Сообщение kutsanov »

Проблема которую решить.
Есть очень часто используемые куски довольно большого кода в форме.
Виджет не хочу использовать, так как кажется, если штук 20 на страницу выкидывать, то накладно по ресурсам.
решил написать свой велосипед
только, как мне кажется, надо вернуться к виджету:), но все таки хочу спросить у понимающих, на сколько большая нагрузка если часто дергать Контроллер.
ниже код
в компоненте

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

    static function htmlInput($params)
    {
        $params['name'] = ($params['name']) ? $params['name'] : $params['id'];
        $Controller = new Controller('test',null);
        return $Controller->render('//../component/views/core/htmlinput', $params);
    } 
вьюга для компонента

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

<div class="form-group">
    <label for="name" class="col-sm-8 control-label"><?=$lbl; ?></label>
    <div class="col-sm-16">
        <input value="" type="text" class="form-control" id="<?=$id; ?>" name="<?=$name; ?>"
               placeholder="<?=$lbl; ?>">
    </div>
</div>
вызов в коде

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

$ar = [
                        'name'=>'Наименование',
                        'inn'=>'ИНН',
                        'kpp'=>'КПП',
                        'bank_with_city'=>'Банк с городо',
                        'rs'=>'Расчетный счет',
                        'ks'=>'Корр. счет',
                        'bik'=>'БИК',
                        'fio_buh'=>'ФИО бухгалтера',
                        'fio_dir'=>'ФИО директора',
                        'add_ur'=>'Адрес юридический',
                        'add_fact'=>'Адрес фактический',
                        'add_post'=>'Адрес почтовый',
                    ];
                    foreach ($ar as $id=>$lbl) {
                        $params = [];
                        $params['lbl'] = $lbl;
                        $params['id'] = $id;
                        echo \app\component\Core::htmlInput($params);
                    } 
kutsanov
Сообщения: 165
Зарегистрирован: 2012.02.08, 15:22

Re: Свой хелпер, но не виджет (мучают сомнения в правильности своего подхода)

Сообщение kutsanov »

в догонку вопрос
Можно ли как то стандартным PHP возвращать представление с подставленными переменными, как это умеет контроллер?
kutsanov
Сообщения: 165
Зарегистрирован: 2012.02.08, 15:22

Re: Свой хелпер, но не виджет (мучают сомнения в правильности своего подхода)

Сообщение kutsanov »

Покопался в коде
компонент можно и так прописать

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

    static function htmlInput($params)
    {
        $params['name'] = ($params['name']) ? $params['name'] : $params['id'];
        return Yii::$app->getView()->render('//../component/views/core/htmlinput', $params);
    } 
Но все равно открыт вопрос о нагрузке, может правильнее все-таки виджетом сделать?
kutsanov
Сообщения: 165
Зарегистрирован: 2012.02.08, 15:22

Re: Свой хелпер, но не виджет (мучают сомнения в правильности своего подхода)

Сообщение kutsanov »

еще прописал:)
слизал в исходниках Yii
теперь наверное это самый быстрый способ

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

    static function htmlInput($params)
    {
        $params['name'] = ($params['name']) ? $params['name'] : $params['id'];
        ob_start();
        ob_implicit_flush(false);
        extract($params, EXTR_OVERWRITE);
        require('views/core/htmlinput.php');

        return ob_get_clean();

    } 
Аватара пользователя
smile
Сообщения: 40
Зарегистрирован: 2011.12.01, 11:36

Re: Свой хелпер, но не виджет (мучают сомнения в правильности своего подхода)

Сообщение smile »

А почему вы всё это не хотите обернуть в модель формы? Там и валидация и прочие радости и не нужно придумывать свои костыли.
kutsanov
Сообщения: 165
Зарегистрирован: 2012.02.08, 15:22

Re: Свой хелпер, но не виджет (мучают сомнения в правильности своего подхода)

Сообщение kutsanov »

smile писал(а):А почему вы всё это не хотите обернуть в модель формы? Там и валидация и прочие радости и не нужно придумывать свои костыли.
Наверное я не правильный разработчик.
Не использую AR
Дае модели я строю не как все, на основе таблиц, а на основе сущностей.
Мне так удобнее, хотя понимаю, что это вроде ка не правильно.
есть стандартная заготовка класса типа

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

namespace app\modules\accounting\models;

use app\component\Core;

class Tovar extends Core {
    /**
     * @return Tovar
     */
    public static function getInstance($className = __CLASS__)
    {
        return parent::getInstance($className);
    }

    public function __construct()
    {
        parent::__construct();
    }

    public function get($id)
    {

    }

    public function del($id)
    {

    }

    public function set()
    {

    }

    public function lst()
    {

    }
} 
В Core общий фукнционал (к Yii не относящийся)
От Yii в основном я беру каркас, доступ к базе, ну и там некоторые плюшки в виде валидаторов, форматов, хелперов)
--
Пытаюсь перейти на нормальное программирование, но как то не получается:(, мозгов не хватает.
kutsanov
Сообщения: 165
Зарегистрирован: 2012.02.08, 15:22

Re: Свой хелпер, но не виджет (мучают сомнения в правильности своего подхода)

Сообщение kutsanov »

smile писал(а):А почему вы всё это не хотите обернуть в модель формы? Там и валидация и прочие радости и не нужно придумывать свои костыли.
Модель формы в данном случае не решает задачу (хотя я и ее не пользую)
тут конкретно заметил

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

<div class="form-group">
    <label for="name" class="col-sm-8 control-label"><?=$lbl; ?></label>
    <div class="col-sm-16">
        <input value="" type="text" class="form-control" id="<?=$id; ?>" name="<?=$name; ?>"
               placeholder="<?=$lbl; ?>">
    </div>
</div>
очень часто вывожу.
вот и хоте обернуть, но виджет не охото использовать. Вот и возбудился:)
dmg
Сообщения: 685
Зарегистрирован: 2012.10.15, 03:09

Re: Свой хелпер, но не виджет (мучают сомнения в правильности своего подхода)

Сообщение dmg »

kutsanov писал(а):
smile писал(а):А почему вы всё это не хотите обернуть в модель формы? Там и валидация и прочие радости и не нужно придумывать свои костыли.
Не использую AR
Дае модели я строю не как все, на основе таблиц, а на основе сущностей.
Модель это не AR.
kutsanov
Сообщения: 165
Зарегистрирован: 2012.02.08, 15:22

Re: Свой хелпер, но не виджет (мучают сомнения в правильности своего подхода)

Сообщение kutsanov »

dmg писал(а):
kutsanov писал(а):
smile писал(а):А почему вы всё это не хотите обернуть в модель формы? Там и валидация и прочие радости и не нужно придумывать свои костыли.
Не использую AR
Дае модели я строю не как все, на основе таблиц, а на основе сущностей.
Модель это не AR.
AR это модель
Аватара пользователя
smile
Сообщения: 40
Зарегистрирован: 2011.12.01, 11:36

Re: Свой хелпер, но не виджет (мучают сомнения в правильности своего подхода)

Сообщение smile »

Смотрю, вы велосипедите свой АР. Если уж хотите что то свое и более правильное, то разделите на репозитории/Data Mapper и Entity.
А по поводу формы - посмотрите в сторону ActiveForm и тогда уже модели формы. Если правильно настроить, то вы в итоге получите такое:

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


<?php $form = ActiveForm::begin() ?>
<?= $form->field($model, 'name') ?>
<?= $form->field($model, 'description')->textarea() ?>
<?php $form->end() ?>

kutsanov
Сообщения: 165
Зарегистрирован: 2012.02.08, 15:22

Re: Свой хелпер, но не виджет (мучают сомнения в правильности своего подхода)

Сообщение kutsanov »

smile писал(а):Смотрю, вы велосипедите свой АР. Если уж хотите что то свое и более правильное, то разделите на репозитории/Data Mapper и Entity.
А по поводу формы - посмотрите в сторону ActiveForm и тогда уже модели формы. Если правильно настроить, то вы в итоге получите такое:

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


<?php $form = ActiveForm::begin() ?>
<?= $form->field($model, 'name') ?>
<?= $form->field($model, 'description')->textarea() ?>
<?php $form->end() ?>

Согласен, что пользую достаточно специфически этот замечательный фрейм!:)
Скажем так - старая школа. Хотя понимаю, что надо меняться, и новый проект сейчас начал делать все в строгом соответствии с Yii. Но это чисто для развития. В рабочих предпочитаю не экспериментировать а делать так как раньше делал, чтобы все работало и без сюрпризов. Пока досконально не вникну в механизмы Yii буду использовать данный стиль.
Ответить