• Почему во vue.js интерполяция не отображает значение?

    @AndrewRusinas
    Потому, что выходит за область видимости цикла v-for. Там нет переменной perfume) Переменная perfume доступна только внутри тега <li>, к которому применена директива v-for. При чем на любом уровне вложенности внутри , но не вне.
    Ответ написан
    Комментировать
  • Хорошие практики тестирования в Laravel проектах?

    Alex_Wells
    @Alex_Wells
    PHP/Kotlin
    Feature - это end-to-end тесты. Ты берешь данные, отправляешь на эндпоинт и проверяешь ответ/статус выполнения задачи. Из этого следует, что никаких под-директорий там быть не может - максимум одна для API, одна для Web, и, если сильно хочется, то одна для CLI. В таких тестах НЕ должно быть моков, подмены зависимостей или чего-либо еще, что мешает полному тестированию эндпоинта от начала и до конца.

    Обычно пишу по одному на каждый эндпоинт, типа GamesListTest для /api/games.

    Unit - юнит тесты. Должны тестировать один класс и мокать остальные зависимости. Тут можете тестировать отдельно контроллеры, джобы, репозитории, сервисы и что-либо еще, что вам вздумается. Все депенденси этих классов нужно подменять и проверять входные аргументы (как можно тщательней, mockery + hamcrest-php).

    Тоже обычно по тесту на класс, то зависит от размера класса, о котором идет речь, и сложности его методов.

    Всегда использую snake_case - так читаемей. assert'ов может быть хоть миллион - за этим вообще не слежу. Разбиваю тесты на методы чисто по логике и нужде - как проще, так и делаю. Лично у меня тесты лежат в "модулях", а не в /tests, но дефолтная структура - неплохой вариант для начала.
    Ответ написан
    4 комментария
  • Best practices в именовании классов, методов и переменных?

    @dzhebrak
    Может есть какой-то сервис/рейтинг популярных слов (прилагательных, существительных) для нейминга, чтобы пополнить словарный запас?

    source-code-wordle.de
    https://onym.co/
    Ответ написан
    Комментировать
  • Best practices в именовании классов, методов и переменных?

    samizdam
    @samizdam
    Ответы:
    > How much is too much?
    Столько сколько достаточно, чтобы из имени класса понять его ответственность.

    > В каком случае лучше использовать короткий нейминг, в каком длинный?
    Дело вкуса. Чувство вкуса приходит с практикой. Практикуйте!

    > Есть ли зависимость между размером проекта и длиной имён?
    Нет.

    > Может есть какой-то сервис/рейтинг популярных слов (прилагательных, существительных) для нейминга, чтобы пополнить словарный запас?
    Учите английский, используйте переводчики. Чем более метко вы сможете транслировать свои мысли в код, тем понятнее он будет. При условии, что мысли правильные и понятные =)
    Ответ написан
    Комментировать
  • Почему в регулярке не работает backreference \1 но срабатывает \g1?

    VlastV
    @VlastV
    Ведущий разработчик – практик
    Для задания шаблона поиска вы используете двойные кавычки. В этом случае, в строке заменяются все служебные последовательности. Одной из таковых (не известных мне) является \1, доказательство:

    php > var_dump("\1", '\1', "\g1", '\g1', "\\1");
    string(1) ""
    string(2) "\1"
    string(3) "\g1"
    string(3) "\g1"
    string(2) "\1"


    Как решение:
    - дважды экранировать (\\1);
    - использовать одинарные кавычки.
    Ответ написан
    Комментировать
  • Поиск по файлам с учетом директории?

    delphinpro
    @delphinpro Куратор тега PhpStorm
    frontend developer
    Поиск там достаточно умный:

    5c674279a7f61587759888.png
    Ответ написан
    1 комментарий
  • Как накатывать миграции на проде?

    fl4r3
    @fl4r3
    Кино, вино и домино
    php artisan migrate --path="/database/migrations"

    И в БД на проде можно еще посмотреть накатанные последние миграции в таблице migrations. Быстрее всего просто напросто команда не выполняется с консоли на прод сервере, а локально, вот и пишет это сообщение, либо на проде в конфиге бд прописана не с ip mysql prod версиии
    Ответ написан
    Комментировать
  • Как лучше сделать выборку с JOIN?

    @Ma3ypok
    Элементарно решается квери билдером:
    $qb = $categoryRepository->createQueryBuilder('category')
        ->addSelect('category.id, category.name')
        ->leftJoin('category.posts', 'posts') 
        ->addSelect('COUNT(posts.id) AS posts_count')
        ->groupBy('category');
    Ответ написан
    Комментировать
  • В чем недостатки такого решения?

    SerafimArts
    @SerafimArts
    Senior Notepad Reader
    В чем недостатки такого решения?

    Помимо отсутствия транзакционности в коде (о чём уже упоминали выше):

    1) Нет ключа на thread_id (желательно foreign)
    2) Типы в INT, вместо UNSIGNED INT
    Т.к. это MySQL, судя по вопросу, то:
    3) Нет указания на collation таблицы (желательно utf8mb4)
    4) Нет указания на движок таблицы (транзакции есть только в InnoDB и их нет в ISAM, MyISAM, Archive, Memory, etc.)
    5) Нет уникальности голосов (т.е. votes), как следствие - таблица денормализованная и подсчитывать так голоса - крайне глупо. В нормальном мире это делается отдельной таблицей с привязкой по comment_id и уникальным ключом на comment_id + user_id.
    6) Так как это комментарии, то использование varchar(255) для поля text - глупо. Нужен TEXT или LONGTEXT.
    7) Отсутствуют поля даты создания и редактирования, что в будущем не позволит строить статистические данные или расширять функционал (разрешать менять текст комментария только в течении 5ти минут, например). На это надо закладываться заранее.

    Это что касается структуры таблицы. Теперь по коду:
    8) Сервис-локация (класс App), вместо нормального DI - это жесть. Скрытые зависимости говорят о невозможности тестирования такого кода.
    9) "Магическая" константа 'comment' говорит о том, что потом такой код нормально не отрефакторить. Т.е. переименовываешь внутри что-то, а потом получаешь кучу ошибок и придётся лазать по коду и везде выгребать этот "get('comment')". И не дай бог где-то они получаются как-то иначе. Работы ещё на пол дня.
    10) Метод getById говорит о том, что сущность должна возвращаться всегда. Однако, может так случиться, что её по указанному id просто не найдётся. Как следствие - нет нормальной обработки ошибок.
    11) Мутабельное поле votes у comment (т.е. имеется прямой доступ к нему). Это говорит о том, что сущность очень сильно связана с БД, а значит любой рефакторинг таблицы ведёт к полному перелопачиванию всего кода.
    12) Нет обработки ошибок во время сохранения сущности.
    13) Метод vote - не лучшее название. Оно переводится и как глагол "голосовать" и как существительное "голос", что может запутать. Я бы переименовал в addVote. Хотя и так тоже норм.

    Это всё, что касается вопроса "в чём недостатки такого решения". Ответ - почти на каждой строчке косяк.

    Если есть вопросы - задавай, могу чуть поподробнее расписать что-либо.
    Ответ написан
    3 комментария
  • В чем недостатки такого решения?

    @dimoff66
    Кратко о себе: Я есть
    Вообще если идет голосование неплохо бы определять ip голосовавшего, если он не авторизован или user_id, иначе потеря одного голоса будет мелочью по сравнению с тем, что один человек может голосовать несчетное кол-во раз. И если надо запомнить голосовавшего, значит нужна отдельная таблица с полями voter и comment_id
    Ответ написан
    4 комментария
  • Совмещать ли edit и update методы контроллера?

    @galliard
    Точкой удобнее сделать один метод. А там уже в зависимости от http-метода вызовите уже конкретные обработчики. Таким образом он будет делать не много, а ровно то, что от него требуется - обрабатывать http-запрос.
    Ответ написан
    Комментировать
  • Как вызывать одну и ту же очередь каждые N секунд?

    JhaoDa
    @JhaoDa
    LaravelRUS Team
    Но вторая и последующие очереди не добавляются в jobs
    Вот тут я мозг сломал. Обычно джобы в очередь ставят, а не очереди в джобы...

    https://github.com/laravel/framework/blob/5.7/src/...
    Ответ написан
    1 комментарий
  • Клонировать Windows 7 с Kingston SSD на Samsung SSD?

    @kalapanga
    А куда он денется? Должен скопировать. Не вижу мешающих причин.
    SATA-USB скорее всего в контексте ноутбуков упоминается, где второй диск чаще всего только так и можно подключить.
    Ответ написан
    Комментировать
  • Клонировать Windows 7 с Kingston SSD на Samsung SSD?

    @SuNbka
    Samsung Data Migration копирует с чего угодно на Samsung SSD.
    Ответ написан
    Комментировать
  • Клонировать Windows 7 с Kingston SSD на Samsung SSD?

    @Tabletko
    никого не трогаю, починяю примус
    Бесплатный Acronis

    upd:
    Кстатии производители дисков частенько раздают его в нагрузку со своим ПО
    Ответ написан
    Комментировать
  • Чем опытнее разработчик, тем меньше соблюдается принцип KISS?

    @asd111
    То что ты назвал - repository, service layer, provider это не так сложно как кажется.

    Repository - это прослойка над моделью, обычно один класс для каждой модели в котором собраны все функции для работы с моделью, т.е. все нужные запросы к БД через модель, чтобы не писать их в самой модели.

    Service layer - прослойка между контроллером и репозиторием, обычно один класс для каждой модели(репозитория). Здесь обычно пишут обработку данных полученных из репозитория чтобы потом можно было сразу вставить во view. Как правило в service layer есть методы create read update delete - как в контроллере и в них пишут ту логику, которую обычно писали в контроллере только без привязки ко view.

    Sevice Provider - некий код который кочует из проекта в проект и делает например авторизацию пользователя или кеширование. В Laravel есть свой механизм service provider.

    Как правило service layer и repository добавляют чтобы всю логику класть туда и сохранить модели и контроллеры очень простыми. Например в методах контроллера может быть банальный вызов методов service layer с привязкой ко view и больше никакой логики.

    Посмотри вот этот пример https://blog.eduonix.com/web-programming-tutorials... и сразу станет понятно.
    В этом подходе нет ничего сложного иначе никто бы не пользовался.
    Можешь сам попробовать написать тот же блог но только с service layer и repository - это проще чем кажется.
    Ответ написан
    Комментировать
  • Чем опытнее разработчик, тем меньше соблюдается принцип KISS?

    Arris
    @Arris
    Сапиенсы учатся, играя.
    Самая частая причина - "бикоз ай кэн".

    Разбирался как-то с одной библиотекой аутентификации на базе ларавель (не сентинель, там отдельный ужас). Господи, автор навернул 6 слоёв абстракции ради одной операции `login()`. ШЕСТЬ, я не шучу. Я мозг сломал, пытаясь это понять.

    Написал автору, да. В ответ получил "Там все просто, чего тебе непонятно? (далее были контрпродуктивные оскорбления)"
    Ответ написан
    4 комментария
  • Как сохранять base64 изображения из WYSIWYG редакторов в БД?

    riky
    @riky
    Laravel
    обычно редакторы имеют события на вставку картинок. делал такое в summernote. нужно просто подписаться на это событие вставки, аяксом отправить картинку на сервер, получить от него постоянную ссылку на картинку и заменить в редакторе src у img на эту постоянную. таким образом при сохранении в коде будет только ссылка на картинку. а картинка обычным файлом на диске.
    Ответ написан
    3 комментария
  • Что значит, когда в вакансиях пишут "Опыт с одним из фреймворков: Symfony, Laravel, Yii"?

    Helldar
    @Helldar
    Just do it.
    Специалисту и язык не помеха. Если он шарит в одном, то и в другой достаточно легко вольётся. То же и с фреймами. Если знаешь один, значит тебе не нужно объяснять принцип работы и их назначение.
    Плюс, да, слова впихивает для повышения выдачи в поиске. Например, у нас искали мощного фронтендера. Мои рекомендации по названию вакансии "frontend-разработчик (middle+)" побрили в пользу "html верстальщик", объяснив это "твой вариант 6 чел просматривали, а наш - 200+". Вот и выходит, что при их варианте из сотни поданных заявок 90 сразу отметаются, т.к. народ видит "верстальщик", а у нас требуется именно фронтендера, да ещё и с нехило опытом.
    Плюс, большинство вакансий составляют HR. Спрашивают у программеров умные слова и используют где не надо.
    Ответ написан
    Комментировать
  • Что значит, когда в вакансиях пишут "Опыт с одним из фреймворков: Symfony, Laravel, Yii"?

    opium
    @opium
    Просто люблю качественно работать
    Это значит если вы осилили один то достаточно легко сможете писать на другом
    Ответ написан
    Комментировать