Dmitriy
мы хотим на DM перейти
Dmitriy
что тогда делать ?
Dmitriy
Надеюсь не нужно описывать чем плох AR
Golodnyi
не знаю о чем ты, но я все еще настаиваю на использовании абстракций
Dmitriy
Про di и интерфейсы
Aleserche
для начало нужно понять что такое M в фрейме. Как раз в этом вся загвоздка. Где должна располагаться логика ?
у меня обычно так, два вида моделей. Для представления и хранения в бд. Бизнес логика шла отдельным доменом и работала только со вторым видом модели.
Dmitriy
Про di и интерфейсы
И как безполезненно заменить AR на DM в проекте 1 сточкой в файле
Golodnyi
ты понимаешь зачем DI были придуманы? Ну типа чтоб в методах класса никто зависимости не создавал, а все зависимости шли через конструктор, либо какой то иной подход, но никакой зависимости внутри объекта, в чем проблема следовать этому принципу без di?
Николай
мы хотим на DM перейти
что такое DM-то?
Dmitriy
DataMapper
Николай
о, благодарю
Golodnyi
di это как orm, его создали чтоб не допускали ошибок при написании sql кода, точно так же di не дает шанса создать плохие зависимости, но в ларавель это для красоты, как уже сказал
Dmitriy
ты понимаешь зачем DI были придуманы? Ну типа чтоб в методах класса никто зависимости не создавал, а все зависимости шли через конструктор, либо какой то иной подход, но никакой зависимости внутри объекта, в чем проблема следовать этому принципу без di?
Для уменьшения связанности кода . У ларки и так крутой di он сам включает di в конструкторах и сам понимает что подставлять Проблема то что без di сложно поменять реализацию скажем логику работу с бд или логгер для проекта.
Aleserche
так этим же контейнер занимается
Golodnyi
я год на ларавель точно уже не писал, мб там много чего изменилось, но мне просто есть с чем сравнить. В некоторых вещах где есть DI, если ты не станешь его использовать, уже через пару часов ты сам поймешь что сделал что то не так, потому что код будет крайней степени эпичности, а в худшем случае он даже не заработает, потому что ты руками все зависимости не разрулишь, в ларавель я DI никогда не использовал сознательно, только когда какие нить сервис провайдеры пишешь, там просто инициализация и di слиты, поэтому там это не обойти, а в других местах писать без di в ларавель довольно легко и не будет никаких намеков, что ты делаешь что то не так. Точки сам расставишь)
Dmitriy
хех. в yii2 тоже не использовал di ?
Golodnyi
да я на нем полторы строки кода писал, я даже не помню что там в нем
Dmitriy
за-то спорил со мной долго на тему yii2 когда-то =(
Golodnyi
в пхп по серьезному di я нигде не юзал, на сколько я помню
Golodnyi
ну то что что-то убогое, могу спорить долго) это же субьективное мнение
Golodnyi
там такой мерзкий синтаксис миграций был, а я их так много писал, страшное дело
Golodnyi
все что я помню о yii2, это какой то минимальное количество статически возможных анализов кода, в следствии чего минимальное количество помощи от редактора, но мб тот человек, с кем я вел проект, просто в каком то не том стиле делал проект, но во всяком случае моё мнение он сложил)
Golodnyi
у меня кстати с самого утра в браузере открыта эта вкладка (https://www.youtube.com/watch?v=bPp3lAkuMEY), весь день не могу отвлечься, чтоб посмотреть
Dmitriy
я год на ларавель точно уже не писал, мб там много чего изменилось, но мне просто есть с чем сравнить. В некоторых вещах где есть DI, если ты не станешь его использовать, уже через пару часов ты сам поймешь что сделал что то не так, потому что код будет крайней степени эпичности, а в худшем случае он даже не заработает, потому что ты руками все зависимости не разрулишь, в ларавель я DI никогда не использовал сознательно, только когда какие нить сервис провайдеры пишешь, там просто инициализация и di слиты, поэтому там это не обойти, а в других местах писать без di в ларавель довольно легко и не будет никаких намеков, что ты делаешь что то не так. Точки сам расставишь)
Как раз я разрулю все зависимости и заменю любые реализации всего чего нужно. Ибо любой фрейм сам подставит подходящую реализацию . Это самая прелесть когда нужно что-то поменять и не нужно менять пол проекта Цель di избежать самокофигурирующихся объектов т.к. это снижает возможность их повторного использования и тестирования. DI столь же уместен как и фабрика. В случае с DI код получается !прозрачнее! обычно нет необходимости явного требования объекта создание необходимых экземпляров проходит за кулисами. К тому же проще сконфигурировать одно правило, чем добавить фабрику.
Golodnyi
ну яж не говорил что di это плохо
Golodnyi
хотя это определенно плохо, в силу того, что он держит в уме то, что может не пригодиться, но это мелочи до какого то момента, его плюсы несомненно хороши
Golodnyi
я говорил лишь что в ларавель di это вот именно как фабрика, что то опциональное, а не стена которую нельзя обойти
Dmitriy
к сожалению в ларавел это так =(
Golodnyi
принципиально?
Aleserche
нет, просто уточнил. Есть же lazy реализации для контейнеров
Golodnyi
мб
Artem
подскажите, как в миграции добавить значение в существующий enum? В документации написано, что никак (лол). Какой костыль посоветуете? Я даже согласен удалить и создать заново поле, но в пределах одной играции, похоже, это сделать нельзя
Aleserche
в sql это примерно так ALTER TABLE table_name MODIFY COLUMN column_name ENUM('foo','bar','new');
Artem
ага, ответ на второй вопрос (удалить и пересоздать) я нашёл - надо просто разделить удаление и создание в разные вызовы Schema::table()
Aleserche
через DB::statement("ALTER TABLE table_name MODIFY COLUMN column_name ENUM('foo','bar','new');")
Artem
в sql это примерно так ALTER TABLE table_name MODIFY COLUMN column_name ENUM('foo','bar','new');
в SQL понятно, вопрос как это прявильно сделать в laravel. Например, в постгре, лара не исполдьзует ENUM, а делает поле варчаром + проверка констрейтом
Golodnyi
$table->enum(...)->change();
Golodnyi
че то такое там было
Golodnyi
или ты про это говоришь, что нельзя?
Artem
для enum не реализован change()
Golodnyi
ну drop и create тогда
Golodnyi
я enum не люблю, он всегда стринг, эт какой то геморой, а не тип
Aleserche
это потому что в php нет типа enum
Golodnyi
да не, в пхп вообще ниче нету, а вот в самом мускуле енум не хранит же цифры
Golodnyi
нельзя там хранить например signed byte или еще чего другого
Golodnyi
не рациональный тип, крайней степени
Artem
мускул как-раз бинарь и хранит для енумов
Artem
1 или 2 байта используется в зависимости от количества вариантов в енуме
Golodnyi
ENUM('value1','value2',...) 1 or 2 bytes, depending on the number of enumeration values (65,535 values maximum) SET('value1','value2',...) 1, 2, 3, 4, or 8 bytes, depending on the number of set members (64 members maximum)
Golodnyi
вот чет не очень понятно
Golodnyi
1 или 2 байта...
Golodnyi
1 или 2 байта на символ или о чем речь?
Artem
если до 256, то один. Если больше, то 2
Artem
в этом байте хранится просто идентификатор значения (по сути номер варианта в списке значений ENUM), сама строка в данных не хранится, она хранится только в схеме таблицы
Aleserche
tinyint or smallint
Artem
поэтому варчар + констрейт, это прям вообще не то же самое, что ENUM
Golodnyi
-
Golodnyi
да, проехали)
Golodnyi
я сразу мысль потерял, я к тому, что бывает нужно разрешить набор байт, использовать бд как валидатор, но такого типа по сути нету
Aleserche
как думаете, имеет ли смысл прикручивать http://platesphp.com/ к ларе?
Владислав
Глядя на примеры: http://platesphp.com/simple-example/
Владислав
Нет.
Владислав
Blade аккуратней.
Aleserche
да вроде простые примеры
Владислав
Да примеры понятны, это, по сути, тот же Twig.
Владислав
Только зачем городить такой код + ещё и прикручивать этот шаблонизатор, имея Blade.
Владислав
Если он что-то даст в плане оптимизации, тогда, мб. А так, хз.
Aleserche
вообще я бы посмотрел бенчмарки, но их нет
Владислав
Угу.
Aleserche
может глянете http://fabien.potencier.org/templating-engines-in-php.html по какой-то причине листинги криво отображаются или это только у меня так?
Владислав
А в чём "кривость"?
Владислав
У меня также отображается. Я не знаю, было ли иначе когда-то.
Владислав
Надо в кэш залезть.
Denis
Подскажите, почему при повторном запросе через ajax не срабатывает код
Denis
Denis
при условии что if возвращает true
Denis
т.е при первом запросе проверка срабатывает и на этом все
Юрий
А put два раза точно можно?