Комментарии 26
Спасибо за статью. Как раз недавно начал изучать Yii2 и сегодня мне надо было сохранять связь many-to-many.
У меня не захотел устанавливаться пакет. Поборол вот таким образом:
У меня не захотел устанавливаться пакет. Поборол вот таким образом:
"require": {
...
"voskobovich/yii2-many-many-behavior": "@dev"
}
Правильно ли я понял, что для каждого релейшна необходимо создавать дополнительный атрибут модели? Не думаю, что это удобно.
Ты правильно понял и я с тобой полностью согласен.
Через пару дней устраню это неудобство и сделаю поведение более гибкое)
Через пару дней устраню это неудобство и сделаю поведение более гибкое)
Возможно, из аналогичного решения для YII1 удастся почерпнуть идеи. Был только полжительный опыт использования данного экстеншна.
А почему стиль фигурных скобок (вернее их отсутствие) из Yii1 +)?
Что ты имеешь ввиду?
да вообще никакие современные стандарты код стайла не используются. слившиеся со скобками if'ы, if'ы без скобок, переменные не по psr-2.
Мне не нравится современные кодстайлы. Читать такой код не совсем удобно.
Я считаю, что если PHP позволяет опустить скобки — значит этим нужно пользоваться.
Чем меньше символов в файле, тем быстрее и легче он анализируется глазами, разве не так?
Точно так же и пространство между строками кода. Чем просторнее и логичнее разделен на блоки код, тем меньше напрягается зрение для анализа и понимания алгоритма.
Когда я писал поведение, я не думал его публиковать вот и оформил не по стандартам.
Со следующим обновлением сделаю форматирование кода по стандарту)
Я считаю, что если PHP позволяет опустить скобки — значит этим нужно пользоваться.
Чем меньше символов в файле, тем быстрее и легче он анализируется глазами, разве не так?
Точно так же и пространство между строками кода. Чем просторнее и логичнее разделен на блоки код, тем меньше напрягается зрение для анализа и понимания алгоритма.
Когда я писал поведение, я не думал его публиковать вот и оформил не по стандартам.
Со следующим обновлением сделаю форматирование кода по стандарту)
Про отступы между строк согласен, про фигурные скобки нет. Даже Yii team перешли на скобки и на то есть причины.
А можно услышать эти самые причины по которым они перешли на скобки?
Я считаю, что если уж и ставить скобки, то только так, чтобы они были на одной вертикали.
Потому что искать открывающую скобку по диагонали при теле if`a в 20 и больше задача для глаз не из легких.
С вертикальным размещением все на порядок проще + IDE подсвечивает. Веди вверх взгляд и ищи светящуюся скобку)
Что скажешь?
Я считаю, что если уж и ставить скобки, то только так, чтобы они были на одной вертикали.
Потому что искать открывающую скобку по диагонали при теле if`a в 20 и больше задача для глаз не из легких.
С вертикальным размещением все на порядок проще + IDE подсвечивает. Веди вверх взгляд и ищи светящуюся скобку)
Что скажешь?
Как минимум если в условие, записанное без фигурных скобок, потребуется добавить еще одно выражение (строку) — придется не забыть добавить те самые фигурные скобки, иначе можно долго ловить баги (проверено на практике). IDE подсвечивает фигурные скобки (парные) если даже все выражение записано в одну строку +)
Я лишь говорю что, если фигурные скобки расположены на одной вертикали, то проще найти их пару. Согласен?
Если взять во внимание, что условия это примерно 65% всего кода, то простота нахождения пары условий должна быть максимальной)
Про забывания поставить скобки и баги… не замечал. IDE же форматирует код так, что не заметить такую оплошность нельзя (PhpStorm).
Ты можешь писать как угодно и каким хочешь почерком, главное чтобы потом было удобно читать)
Я студент и мне знакома ситуация, когда на паре писал и было все понятно, а при подготовке к экзамену материшься на свой же почерк)
Если взять во внимание, что условия это примерно 65% всего кода, то простота нахождения пары условий должна быть максимальной)
Про забывания поставить скобки и баги… не замечал. IDE же форматирует код так, что не заметить такую оплошность нельзя (PhpStorm).
Ты можешь писать как угодно и каким хочешь почерком, главное чтобы потом было удобно читать)
Я студент и мне знакома ситуация, когда на паре писал и было все понятно, а при подготовке к экзамену материшься на свой же почерк)
Я лишь говорю что, если фигурные скобки расположены на одной вертикали, то проще найти их пару. Согласен?
Неа. Не вижу особой разницы.
IDE же форматирует код так, что не заметить такую оплошность нельзя (PhpStorm).
Я вот про это:
if($a == 5)
$b = 10;
$c = 15;
главное чтобы потом было удобно читать)
На все 100 +)
Мой PhpStorm пишет вот так:
если писать сперва первую строку, потом вторую строку и третью)
Дискуссия хороша, но не имеет смысла. Против общепризнанных стандартов я идти не собираюсь)
Я тоже бываю не прав и сейчас как раз такая ситуация.
Раз я пишу публичное расширение для проекта то должен соблюдать кодстайл принятый в проекте!
if($a == 100)
$a = 300;
$b = 5;
если писать сперва первую строку, потом вторую строку и третью)
Дискуссия хороша, но не имеет смысла. Против общепризнанных стандартов я идти не собираюсь)
Я тоже бываю не прав и сейчас как раз такая ситуация.
Раз я пишу публичное расширение для проекта то должен соблюдать кодстайл принятый в проекте!
Не так. Текст воспринимается тем быстрее и легче, чем он будет более стандартен и, соотвественно, привысен. В китайском, например, символов очень мало. Но ведь это не делает тексты на китайском более простыми к восприятию для тех, кто на китайском не пишет.
Отсутствие фигурных скобок github.com/yiisoft/yii2/blob/master/framework/base/Action.php#L83
Спасибо за начинание! Очень не хватает такого поведения, а раз за разом повторять один и тот же код не хочется.
А почему не github? Вероятность, того что вам помогут с разработкой на github'е гораздо выше чем на Bitbucket'e
Лучше скачать/обновить только новую зависимость, а не все зависимости:
Для новой версии лучше всего сделать отдельную ветку от master'а, и по готовности влить ее в масте. Сейчас я не могу скачать и начать пользоваться сразу — приходится тратить время на разбирательства почему не работает и откатываться к рабочему коммиту.
P.S. Жду рабочую новую версию :) Попробовал, что такое делать pull-реквесты на Bitbucket'е.
А почему не github? Вероятность, того что вам помогут с разработкой на github'е гораздо выше чем на Bitbucket'e
Лучше скачать/обновить только новую зависимость, а не все зависимости:
# php composer.phar update voskobovich/yii2-many-many-behavior
Для новой версии лучше всего сделать отдельную ветку от master'а, и по готовности влить ее в масте. Сейчас я не могу скачать и начать пользоваться сразу — приходится тратить время на разбирательства почему не работает и откатываться к рабочему коммиту.
P.S. Жду рабочую новую версию :) Попробовал, что такое делать pull-реквесты на Bitbucket'е.
Не подумал, что мне могут помочь с разработкой. На Bitbucket у меня все приватные репо и по традиции…
Но, я перееду на github, раз такое дело)
И с версиями я тоже намудрил, делаю тэгами, а надо ветками.
Все исправлю!
Но, я перееду на github, раз такое дело)
И с версиями я тоже намудрил, делаю тэгами, а надо ветками.
Все исправлю!
Попытался использовать первую версию поведения, мне не хватает возможности сохранить пустой список — т.е. удалить текущие связи, а новых не создавать (т.к. пришел пустой массив id'шников). Также удобно было бы, чтобы была возможность для новых моделей иницализировать список связей вручную (например, я перешел по ссылке «создать продукт в этой категории»).
Не совсем понял, второй пункт «Также удобно было бы, чтобы была возможность для новых моделей иницализировать список связей вручную (например, я перешел по ссылке «создать продукт в этой категории»).» — можно еще пример?
Про удаление связей вообще — хорошая идея. Учтем.
Сейчас я работаю над поддержкой остальных типов связи: has many и has one.
Залью код в новую ветку.
Переехал на GitHub: ManyToManyBehavior. Буду ждать PullRequest`ов.
Про удаление связей вообще — хорошая идея. Учтем.
Сейчас я работаю над поддержкой остальных типов связи: has many и has one.
Залью код в новую ветку.
Переехал на GitHub: ManyToManyBehavior. Буду ждать PullRequest`ов.
Usecase: Я нахожусь в списке категорий товаров (у меня товар может быть сразу в нескольких категориях, many-to-many), рядом с каждой категорией есть кнопка добавить новый товар в категорию, нажимая на которую, я попадаю на страницу заполнения сведений о новом товаре. В этой форме есть возможность указать категории, к которым будет принадлежать товар, т.к. при переходе по ссылке я указал номер «первой категории» я бы хотел ее сразу показать в этом списке (т.е. фактически, вручную добавить «первую категорию» в список категорий новой модели товара).
Отличный пример. Только как в этом может помочь поведение?
Передайте ID первой категории GET параметром и потом перед отображением формы, в контроллере, запишите его
Это позволит сразу выделить первую категорию в мульти-select`e, а сохраниться она в базу уже после сохранения товара)
Передайте ID первой категории GET параметром и потом перед отображением формы, в контроллере, запишите его
$productModel->categories_list[] = $_GET['cat_id']
Это позволит сразу выделить первую категорию в мульти-select`e, а сохраниться она в базу уже после сохранения товара)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Сохранение «многие ко многим» в Yii2 через поведение