Авто-генерируемые модели в виде 2 файлов ActiveRecord
Авто-генерируемые модели в виде 2 файлов ActiveRecord
После добавление своего кода автогенератором пользоваться очень сложно, есть расширения позволяющие разделить модели на 2 класса, один авто-генерируемый, второй с пользовательским кодом расширяет авто-генерируемый класс...
Давно хотел сделать, но нашёл расширение https://github.com/schmunk42/yii2-giiant
В общем то что я хотел, но расширение заброшено на начальном этапе да и сама реализация предполагает постоянную поддержку расширения.
В связи с этим я всё таки решил сам реализовать эту идею, написав небольшое расширение...
https://github.com/mj4444ru/yii2-gii
Мне вот интересно почему такой подход не получил должной поддержки? В нём есть какие то серьёзные минусы?
Кто что может сказать на эту тему?
Отличия от стандартного генератора
----------------------------------
- Дополнительный класс модели для пользовательского кода
- Автогенерация валидаторов для значений по умолчанию
- Автогенерация валидаторов для полей enum (возможно частичное/полное отключение)
- Автогенерация констант для полей enum и set
- Автогенерация behaviors для моделей содержащих поля обрабатываемые TimestampBehavior
- Таблица 'migration' исключается из автогенерации (настраивается)
- Возможно настроить список игнорируемых таблиц
- Полностью переработано создание имён для связей
Давно хотел сделать, но нашёл расширение https://github.com/schmunk42/yii2-giiant
В общем то что я хотел, но расширение заброшено на начальном этапе да и сама реализация предполагает постоянную поддержку расширения.
В связи с этим я всё таки решил сам реализовать эту идею, написав небольшое расширение...
https://github.com/mj4444ru/yii2-gii
Мне вот интересно почему такой подход не получил должной поддержки? В нём есть какие то серьёзные минусы?
Кто что может сказать на эту тему?
Отличия от стандартного генератора
----------------------------------
- Дополнительный класс модели для пользовательского кода
- Автогенерация валидаторов для значений по умолчанию
- Автогенерация валидаторов для полей enum (возможно частичное/полное отключение)
- Автогенерация констант для полей enum и set
- Автогенерация behaviors для моделей содержащих поля обрабатываемые TimestampBehavior
- Таблица 'migration' исключается из автогенерации (настраивается)
- Возможно настроить список игнорируемых таблиц
- Полностью переработано создание имён для связей
Последний раз редактировалось mj4444 2015.06.25, 12:25, всего редактировалось 2 раза.
Re: Авто-генерируемые модели в виде 2 файлов ActiveRecord
1) > но расширение заброшено на начальном этапе
я смотрю - последний коммит день назад. Как это заброшено?
2) > Мне вот интересно почему такой подход не получил должной поддержки? В нём есть какие то серьёзные минусы?
сейчас работаю на проекте, где как раз используется подобный подход. Сначала мне показалось что плюсы есть, потом понял что плюсов нет вообще. Один гемор. Экономия времени вообще минимальная. А валидацию в любом случае приходится переписывать в пользовательском классе с нуля.
я смотрю - последний коммит день назад. Как это заброшено?
2) > Мне вот интересно почему такой подход не получил должной поддержки? В нём есть какие то серьёзные минусы?
сейчас работаю на проекте, где как раз используется подобный подход. Сначала мне показалось что плюсы есть, потом понял что плюсов нет вообще. Один гемор. Экономия времени вообще минимальная. А валидацию в любом случае приходится переписывать в пользовательском классе с нуля.
Re: Авто-генерируемые модели в виде 2 файлов ActiveRecord
какой подход и от кого поддержки?mj4444 писал(а):Мне вот интересно почему такой подход не получил должной поддержки?
Re: Авто-генерируемые модели в виде 2 файлов ActiveRecord
В штатном генераторе сделали галочку для генерации отдельных активквери, а для отдельного активрекорда нет... Хотя там делать то через штатный 10 строк кода...zelenin писал(а):какой подход и от кого поддержки?mj4444 писал(а):Мне вот интересно почему такой подход не получил должной поддержки?
Re: Авто-генерируемые модели в виде 2 файлов ActiveRecord
1) Все коммиты там касательно "crud"... А я сейчас не о нём...S c писал(а):1) > но расширение заброшено на начальном этапе
я смотрю - последний коммит день назад. Как это заброшено?
2) > Мне вот интересно почему такой подход не получил должной поддержки? В нём есть какие то серьёзные минусы?
сейчас работаю на проекте, где как раз используется подобный подход. Сначала мне показалось что плюсы есть, потом понял что плюсов нет вообще. Один гемор. Экономия времени вообще минимальная. А валидацию в любом случае приходится переписывать в пользовательском классе с нуля.
2) В чём гемор? Каким образом используется подобный подход? Конечно если использовать стандартный генератор, то гемора конечно не меньше будет...
Re: Авто-генерируемые модели в виде 2 файлов ActiveRecord
Давайте сразу сэкономим наше время. Скажите лучше вы, каким образом вы рекомендуете подобный подход? Какие вы видите плюсы? Может я не уловил главное предназначение такого подхода. Спасибо
Re: Авто-генерируемые модели в виде 2 файлов ActiveRecord
В том что перегенерировать модель можно после добавления в неё функционала... Сейчас в модель вносятся правки и автогенератор становится бесполезным...S c писал(а):Давайте сразу сэкономим наше время. Скажите лучше вы, каким образом вы рекомендуете подобный подход? Какие вы видите плюсы? Может я не уловил главное предназначение такого подхода. Спасибо
Re: Авто-генерируемые модели в виде 2 файлов ActiveRecord
Зачем перегенерировать модель вообще нужно? Это может быть полезно только на самом раннем этапе разработке, когда структура БД сильно меняется (и то, в идеале перед стартом разработки проекта хорошо продумывается архитектура БД, в итоге если все хорошо продумано - модель и БД уже не будут сильно изменятся). А добавить новое поле\связь - это ровно 30 секунд дела. Я больше потрачу на перепроверку, не сломалось ли что то, от автоматически созданного дополнительного правила валидации. Вручную я добавлю то что мне нужно только туда, где мне нужно.
Поправьте если я не прав, или опять же не уловил что то.
Поправьте если я не прав, или опять же не уловил что то.
Re: Авто-генерируемые модели в виде 2 файлов ActiveRecord
аналогично думаю. gii не пользуюсь, т.к.скопипастить по времени быстрее, а правила валидации все равно надо проверять и дополнять.
Re: Авто-генерируемые модели в виде 2 файлов ActiveRecord
В идеале так... На практике получается иначе... Добавили новую модель, надо менять все связанные модели... Ну конечно если вы связи базы не используете и пишете их сами, вам это не понять (это не личное)...S c писал(а):Зачем перегенерировать модель вообще нужно? Это может быть полезно только на самом раннем этапе разработке, когда структура БД сильно меняется (и то, в идеале перед стартом разработки проекта хорошо продумывается архитектура БД, в итоге если все хорошо продумано - модель и БД уже не будут сильно изменятся). А добавить новое поле\связь - это ровно 30 секунд дела. Я больше потрачу на перепроверку, не сломалось ли что то, от автоматически созданного дополнительного правила валидации. Вручную я добавлю то что мне нужно только туда, где мне нужно.
Поправьте если я не прав, или опять же не уловил что то.
Ну и опять же где то что то можно пропустить, напутать... Опять же всё это надо проверять что бы исключить предыдущее, что не актуально в случае автоматической генерации...
Последний раз редактировалось mj4444 2015.06.09, 13:42, всего редактировалось 2 раза.
Re: Авто-генерируемые модели в виде 2 файлов ActiveRecord
Все правила достаточно стандартны и можно их сгенерировать автогенератором... Ну по крайней мере я с другими не сталкивался... Но если они всё же есть, их можно добавить во второй класс...zelenin писал(а):аналогично думаю. gii не пользуюсь, т.к.скопипастить по времени быстрее, а правила валидации все равно надо проверять и дополнять.
Приведите пример реального использования валидации которую нельзя сгенерировать автоматически...
Re: Авто-генерируемые модели в виде 2 файлов ActiveRecord
любая валидация, которую нельзя сгенерировать на основе БДmj4444 писал(а):Все правила достаточно стандартны и можно их сгенерировать автогенератором... Ну по крайней мере я с другими не сталкивался... Но если они всё же есть, их можно добавить во второй класс...zelenin писал(а):аналогично думаю. gii не пользуюсь, т.к.скопипастить по времени быстрее, а правила валидации все равно надо проверять и дополнять.
Приведите пример реального использования валидации которую нельзя сгенерировать автоматически...
Re: Авто-генерируемые модели в виде 2 файлов ActiveRecord
>Приведите пример реального использования валидации которую нельзя сгенерировать автоматически...
"enum" валидация. Когда (например) статусы хранятся в константах, я всегда добавляю range валидатор для статуса. Все статусы принципиально храню в константах, а не в БД (enum\set тип какой нить).
Еще ситуация когда стандартные автоматические валидаторы начинают ломать что то.
"enum" валидация. Когда (например) статусы хранятся в константах, я всегда добавляю range валидатор для статуса. Все статусы принципиально храню в константах, а не в БД (enum\set тип какой нить).
Еще ситуация когда стандартные автоматические валидаторы начинают ломать что то.
Re: Авто-генерируемые модели в виде 2 файлов ActiveRecord
это правильно.S c писал(а):>Приведите пример реального использования валидации которую нельзя сгенерировать автоматически...
"enum" валидация. Когда (например) статусы хранятся в константах, я всегда добавляю range валидатор для статуса. Все статусы принципиально храню в константах, а не в БД (enum\set тип какой нить).
Или когда range складывается из строк БД различной сложности
Re: Авто-генерируемые модели в виде 2 файлов ActiveRecord
Валидация set / enum была как раз одним из поводов к написанию этого и сейчас это уже есть...S c писал(а):>Приведите пример реального использования валидации которую нельзя сгенерировать автоматически...
"enum" валидация. Когда (например) статусы хранятся в константах, я всегда добавляю range валидатор для статуса. Все статусы принципиально храню в константах, а не в БД (enum\set тип какой нить).
Еще ситуация когда стандартные автоматические валидаторы начинают ломать что то.
Константы так же добавляются этим расширением...
На счёт ломать - это редкие частные случае которые не являются собственно проблемой и понятны сразу...
Расширение нужно чтобы облегчить работу, а не сделать её полностью за вас... Думать всегда надо...
Re: Авто-генерируемые модели в виде 2 файлов ActiveRecord
Научил расширение автоматически обновлять комменты в файлах дополнительного кода
Примеры файлов
Примеры файлов
Код: Выделить всё
<?php
namespace common\models;
use Yii;
/**
* This is the model class for table "{{%bonuses}}".
*
* @property integer $id
* @property integer $user_id
* @property integer $created_at
* @property string $operation
* @property integer $quantity
* @property string $comment
* @property integer $event_schedule_id
* @property integer $event_reservation_id
*/
class BonusesBase extends \yii\db\ActiveRecord
{
const OPERATION_ADD = 'add';
const OPERATION_DEDUCTION = 'deduction';
const OPERATION__VALUES = ['add', 'deduction'];
/**
* @inheritdoc
*/
public static function tableName()
{
return '{{%bonuses}}';
}
/**
* @inheritdoc
*/
public function rules()
{
return [
[['user_id', 'operation', 'quantity', 'comment'], 'required'],
[['user_id', 'quantity', 'event_schedule_id', 'event_reservation_id'], 'integer'],
[['operation', 'comment'], 'string'],
[['operation'], 'in', 'range' => [BonusesBase::OPERATION_ADD, BonusesBase::OPERATION_DEDUCTION]]
];
}
/**
* @inheritdoc
*/
public function attributeLabels()
{
return [
'id' => Yii::t('app', 'ID'),
'user_id' => Yii::t('app', 'User ID'),
'created_at' => Yii::t('app', 'Created At'),
'operation' => Yii::t('app', 'Operation'),
'quantity' => Yii::t('app', 'Quantity'),
'comment' => Yii::t('app', 'Comment'),
'event_schedule_id' => Yii::t('app', 'Event Schedule ID'),
'event_reservation_id' => Yii::t('app', 'Event Reservation ID'),
];
}
/**
* @inheritdoc
* @return BonusesQuery the active query used by this AR class.
*/
public static function find()
{
return new BonusesQuery(get_called_class());
}
/**
* @inheritdoc
*/
public function behaviors()
{
return [
\yii\behaviors\TimestampBehavior::className()
];
}
}
Код: Выделить всё
<?php
namespace common\models;
use Yii;
/**
* This is the model class for table "{{%bonuses}}".
*
* @property integer $id
* @property integer $user_id
* @property integer $created_at
* @property string $operation
* @property integer $quantity
* @property string $comment
* @property integer $event_schedule_id
* @property integer $event_reservation_id
*/
class Bonuses extends BonusesBase
{
}
Последний раз редактировалось mj4444 2015.06.09, 19:34, всего редактировалось 1 раз.
Re: Авто-генерируемые модели в виде 2 файлов ActiveRecord
для массива однородных констант сделайте геттер - будет полезен и в валидации и во вьюшках
Re: Авто-генерируемые модели в виде 2 файлов ActiveRecord
Так то мысли на эту тему были...zelenin писал(а):для массива однородных констант сделайте геттер - будет полезен и в валидации и во вьюшках
Можно пример как должно выглядеть?
Re: Авто-генерируемые модели в виде 2 файлов ActiveRecord
Код: Выделить всё
public static function getStatus($id = null)
{
$statuses = [
self::STATUS_ACTIVE => Module::t('Active'),
self::STATUS_INACTIVE => Module::t('Inactive'),
self::STATUS_BANNED => Module::t('Banned')
];
if ($id !== null) {
return ArrayHelper::getValue($statuses, $id, null);
}
return $statuses;
}
Re: Авто-генерируемые модели в виде 2 файлов ActiveRecord
Получилось в итоге так:zelenin писал(а):Код: Выделить всё
public static function getStatus($id = null) { $statuses = [ self::STATUS_ACTIVE => Module::t('Active'), self::STATUS_INACTIVE => Module::t('Inactive'), self::STATUS_BANNED => Module::t('Banned') ]; if ($id !== null) { return ArrayHelper::getValue($statuses, $id, null); } return $statuses; }
Код: Выделить всё
public function enumValues($field = null)
{
$consts = [
'operation' => [self::OPERATION_ADD, self::OPERATION_DEDUCTION]
];
if (is_null($field)) {
return $consts;
}
return isset($const[$field]) ? $const[$field] : [];
}
Последний раз редактировалось mj4444 2015.06.09, 22:41, всего редактировалось 1 раз.