Задать вопрос
Ответы пользователя по тегу Laravel
  • Как работаете с формами в Ларавел?

    Wolfnsex
    @Wolfnsex
    Если не хочешь быть первым - не вставай в очередь!
    1. Как помнится из коробки что-то было для работы с формами, но потом выкинули?
    Так и есть, выкинули за ненадобностью подобных хвостов в основном фреймворке. В том смысле, что этот хвост ещё и поддерживать нужно...

    Выходит по дефолту работаем с формами на чистом HTML (+blade)? Может какие-то пакеты юзаете?
    Можно так, можете пользоваться теми формами которые выпилили, можете воспользоваться вариантом аки symfony, ещё можно тут поискать другие варианты.

    2. Как правильно работать при CRUD c C и U, т.е. нужно два раза форму показать и это разные вьюхи? или форму в одну вьюху закидываете и там рулите?
    Всё индивидуально. В общей сложности, при простых вариантах - создавать разные файлы форм не обязательно, при "C" можете создавать ту же форму что и при "U", передавая туда пустую модель.
    Ответ написан
    Комментировать
  • Плоха ли описанная архитектура, для laravel?

    Wolfnsex
    @Wolfnsex
    Если не хочешь быть первым - не вставай в очередь!
    Чем это хуже подхода - когда вся логика распологается в сервисах, и в целом чем плох такой подход?
    Он ничем не хуже и не лучше. Пакеты - это одно, сервисы - другое, а Вы их зачем-то "складываете в одну корзину". Что по сути своей представляет пакет? - пакет - это некий модуль, решающий какую-то конкретную задачу, поддерживаемый и обслуживаемый конкретным веднором. В массе своей пакеты никак не привязаны к тому, где и как они будут использоваться. То есть, пакет - это некий набор общей логики, процессов и т.д. для решения какой-то задачи (или набора схожих/связанных задач), например для обработки изображений.

    Сервис или какая-то иная часть приложения - это часть именно конкретного (вашего) приложения, то есть что-то, что написано и предназначено конкретно для данного приложения, а не для универсального решения общих задач. Пакет - логическая противоположенность этому.

    Не стоит забывать, что чем более универсальным является какое-то решение (аки "швецарский нож") - тем хуже оно решает конкретную задачу. Это же полностью применимо и к тому, что описываете Вы. Если Вы будете делать некие универсальные решения и складывать их в пакеты:
    1. Потеряете выраженность решений
    2. Потеряете производительность
    3. Получите на обслуживание много приложений (пакетов) вместо одного конкретного

    Если же Вы собираетесь складывать в пакеты не "универсальные решения", а "точечные" - то это на мой взгляд худший из возможных вариантов, так как это будет всё то же "размазывание кода", только убранное в другую папку, с глаз долой, плюс к этому добавятся все прелести связанные с обслуживанием пакетов.

    "Не гадить в код" - это искусство и опыт, которые никакой "пакет" не заменит.
    Ответ написан
    1 комментарий
  • Отдельная папка в Controllers для каждой роли?

    Wolfnsex
    @Wolfnsex
    Если не хочешь быть первым - не вставай в очередь!
    Нормально ли для каждой роли делать отдельную папку в Controllers и почти дублировать все контроллеры, чуть их модифицируя?
    Нет. Если даже отбросить все прочие "но", представьте, чего Вам будет стоить ввести новую роль в систему?! Это же будет полный ахтунг!

    Также получается и роуты дублируются... и виды.
    Тем более.

    Есть просто мысль, что я много кода дублирую, нормально ли это?
    Нет, не нормально. Честно говоря, я не понимаю, как Вы смогли изучить Laravel, при этом обойдя вниманием один из основополагающих принципов разработки DRY.

    Для ролей и разрешений использую "laravel spatie permission".
    Честно говоря, не знаю что это, но если текущий модуль обслуживания прав/привилегий/ролей/управления доступом (и т.п.) - Вас чем-то не устраивает или заставляет(?) Вас нарушать основополагающие принципы разработки - нужно просто найти другой, более подходящий под Ваши конкретные задачи.
    Ответ написан
    4 комментария
  • Что лучше Laravel или Lumen для REST API?

    Wolfnsex
    @Wolfnsex
    Если не хочешь быть первым - не вставай в очередь!
    а значит надо еще и прикручивать blade
    Не значит.

    К тому же кто-то писал, что dingo/api плохая вещь.
    Вас никто не заставляет его использовать, если он плохая вещь.

    но я хочу грамотно и определить для себя хорошую архитектуру.
    Хорошая архитектура начинается с постановки конкретных задач и требований, а в данный момент у Вас нет вообще никаких конкретных требований - можете делать на чём угодно, для данных условий подходит любой вариант.

    аргументированные ответы и ваш опыт.
    Мой опыт подсказывает мне, что Lumen был изначально придуман для максимальной скорости работы, что обычно важно при написании таких сервисов как различные REST/API-серверы, особенно при больших нагрузках на оные.

    а следовательно зря тащиться каждый раз в проекте и мусорить
    Обычно то, что Вы называете "мусором" лежит в тех папках, в которые программисту лазить по определению не положено. Но, если ставить вопрос именно так то "мусор" будет в любом случае, не зависимо от выбора фреймворка.

    P.S. Возвращаясь к вопросу "архитектуры" - сначала пишут задачу, потом требования, а потом под эти требования подбирают решение, которое подходит под эти требования. Если Вы начнёте работать именно по такому принципу - вопросы подобные этому будут отпадать сами собой, раньше чем будут появляться.
    Ответ написан
    4 комментария
  • Кто поможет запустить envoy run deploy Laravel?

    Wolfnsex
    @Wolfnsex
    Если не хочешь быть первым - не вставай в очередь!
    Я думаю, для начала Вам нужно убедиться в том, что файл "envoy" (или "envoy.bat" или "envoy.exe" или другой вариант исполняемого файла) находится либо в той папке, из которой Вы пытаетесь выполнить эту команду, либо он прописан в переменной окружения PATH. Так же, возможна проблема связанная с отсутствием в Windows'ах shebang-синтаксиса, из-за чего нужно будет запускать интерпретатор руками, так же как это делается с Artisan'ом, например так: php artisan run:command

    Но, и после этого, с большей вероятностью могу сказать, что либо оно у Вас не заработает вообще, либо функционал будет сильно ограничен, по причинам озвученным г-ном Владислав Лысков .
    Ответ написан
  • Что почитать о создании многопользовательского приложения для редактирования данных?

    Wolfnsex
    @Wolfnsex
    Если не хочешь быть первым - не вставай в очередь!
    Что можно почитать по этому поводу, в каком направлении хотя бы гуглить?
    Основных вариантов, на вскидку, могу предложить следующие:
    1. При редактировании записи (строки или любой другой сущности, по вашему усмотрению) на неё устанавливается метка, примерно такая: "редактируется пользователем таким-то", соответствующая метка удаляется по завершению редактирования. Таким образом это работает в некоторых CMS.
    2. Можно придумать какую-то систему на основе WebSocket-протокола, я думаю сервисы на подобии GoogleDocs или Trello (позволяющие редактировать один документ сразу нескольким пользователям) работают именно на его основе, это как минимум позволит видеть обновления данных всем пользователям практически в реальном времени
    3. Можно хранить все версии данных, а потом что-то делать с ними... Что именно делать - пока сказать затрудняюсь, т.к. не до конца понимаю, какие у Вас конечные требования, возможно этот вариант не подойдёт.
    Ответ написан
    Комментировать
  • Как в Laravel кешировать json-ответ?

    Wolfnsex
    @Wolfnsex
    Если не хочешь быть первым - не вставай в очередь!
    Можно ли эти данные закешировать как-то стандартными средствами Laravel и чтобы они обновлялись раз в 5 минут?
    А что Вам мешает закэшировать их например, в Redis со сроком жизни кэша 5 минут и проверять, есть ли данные в кэше (и если их там нет - класть их туда, на следующие 5 минут)?

    P.S. Средства лары для работы с кэшем хорошо описаны тут.
    Ответ написан
    2 комментария
  • Как объединить таблицы?

    Wolfnsex
    @Wolfnsex
    Если не хочешь быть первым - не вставай в очередь!
    Вариантов тут на мой взгляд несколько:
    1. Воспользовать связями на уровне Laravel
    2. Создать в БД view'шку с нужными данными и делать выборку из неё
    3. С помощью DB::select, создать запрос, в котором Вы объедините таблицы с помощью запроса как Вам нужно
    Ответ написан
    Комментировать
  • Как можно управлять стилями css/scss через админку Laravel?

    Wolfnsex
    @Wolfnsex
    Если не хочешь быть первым - не вставай в очередь!
    А как к этому можно было бы Laravel прикрутить или наоборот к Laravel?
    Точно так же как и к обычному PHP. Зачем менять HEADER - мне пока не ясно, можете грузить любой текст с сервера, подключая его как CSS (должно по идее работать без всяких дополнительных телодвижений).

    И вообще такое практикуется?
    Обычно - нет.

    Ведь есть же куча админок, где есть возможность менять цвет фона, цвет кнопок. Как такое реализуется?
    Чаще всего, либо с помощью JavaScript'a, либо с помощью подмены CSS-файла (на главной странице) переопределяющего некоторые стили (либо совокупностью этих методов).
    Ответ написан
    3 комментария
  • Как сохранить временно картинку в Laravel?

    Wolfnsex
    @Wolfnsex
    Если не хочешь быть первым - не вставай в очередь!
    Есть ли в laravel способ сохранить картинку на определенное время?
    В самом Laravel'е - вряд ли (скорее всего - нет). По причине того, что это не очень типовая задача и к конкретному фреймворку (например, Laravel) она прямого отношения не имеет.

    Или же остается способ загружать картинку как обычно и по крону отчищать директорию?
    Я бы пользовался at, оно как мне видится чуть больше подходит для данной задачи.

    Так же, в Redis'е есть возможность устанавливать срок жизни данных, а в Laravel есть поддержка Redis'а. Можно воспользоваться этой возможностью Redis'а, сохраняя данные там. Так же в Redis'е есть "события", которые в т.ч. могут оповестить о том, что срок жизни "таких-то" данных истёк и привязать соотв. удаление файла связанного с этими данными с диска.

    *оба этих варианта, в теории могут дать сбой и данные могут не удалиться, по этой причине раз в N часов/дней я бы рекомендовал всё-таки сканировать директорию с файлами на поиск "неудалённого мусора".

    В MySQL есть встроенный scheduler, файлы можно сохранять там и удалять по истечение срока их жизни (который можно указать при сохранении).

    При необходимости можно "притащить тяжелую артилерию", поставить сервер очередей (или использовать уже имеющийся, если таковой есть, вот тут кое-что об этом писали), соотв. при загрузке картинки добавлять задачу на удаление оной как "отложенную".

    P.S. "Что лучше" - зависит от каждого случая индивидуально, если ничего "лишнего" в проекте нет - можно использовать at + cron (для не частых проверок на наличие различного мусора, который по какой-то причине не был удалён, хотя, возможно это и не обязательно, глубоких тестов я не проводил...)
    Ответ написан
    Комментировать
  • Как заблокировать одновременное редактирование записи в БД на laravel?

    Wolfnsex
    @Wolfnsex
    Если не хочешь быть первым - не вставай в очередь!
    Как реализовать запрет на одновременное редактирование записи в БД MySQL c помощью LARAVEL?
    Добавить флаг (колонку в БД), подобный функционал был придуман и применяется ещё с лохматых годов, соотв. при попытке начать редактирование записи - этот флаг должен проверяться.

    Чуть более сложный вариант - блокировать запись на уровне БД, не знаю насколько он Вам подойдёт и нужен ли вообще, но такой вариант тоже есть.

    А в браузерах android не отслеживается закрытие вкладки!!!
    Я Вам по секрету скажу, закрытие вкладки даже в браузерах "не адроид" не всегда можно отследить и всецело полагаться на что-то подобное я бы не стал. Один из вариантов "надёжного" отслеживания наличия "клиента на линии" - выглядит примерно так:
    1. Поднимаете сервер веб-сокетов, он же будет контроллировать блокировку той или иной записи в БД
    2. Каждые N-секунд отсылаете клиенту PING-запрос, если клиент не ответил (X раз подряд, и/или в течении Y секунд) сбрасываете блокировку (ну и можно заодно попробовать клиенту уведомление отослать, или прямо у клиента в браузере повесить индикатор активности соединения). Нечто аналогичное используют множество сетевых сервисов, например IRC- серверы/клиенты.

    P.S. Это наиболее простые и эффективные варианты. Непосредственного отношения к Laravel они не имеют и с учётом контекста вопроса - и не должны.
    Ответ написан
  • Какой из CRUD-генераторов на Laravel лучший?

    Wolfnsex
    @Wolfnsex
    Если не хочешь быть первым - не вставай в очередь!
    P.S. Разумеется, GitHub проверял
    Я бы на Вашем месте проверял бы всё-таки вот этот сайт, куда удобнее, чем по GitHub'у шариться...

    Ну и
    но принимать решение в выборе "по количеству звездочек" - на мой взгляд слишком обывательский подход.
    В этом я Вас полностью поддерживаю, я бы в дополнение к звёздочка основывался бы так же на: кол-ве загрузок, совместимостью с вашей версией фреймворка, активностью разработки проекта, датой последнего обновления оного и другими параметрами.
    Ответ написан
    Комментировать
  • Как отправить данные с form методом put?

    Wolfnsex
    @Wolfnsex
    Если не хочешь быть первым - не вставай в очередь!
    после того как делаю submit просто белый экран появляется. В консоле пишет что был отравлен методом post.
    В браузере формы отправляются либо методом "GET", либо "POST". Остальное поведение "эмулируется" на уровне фреймворка. Подробнее про то, как указать метод, которым отправляется форма можно почитать в документации к Laravel.
    Ответ написан
    Комментировать
  • Как относится Laravel к Symfony?

    Wolfnsex
    @Wolfnsex
    Если не хочешь быть первым - не вставай в очередь!
    Почему в Laravel много компонентов из Symfony? Laravel это форк Symfony?
    Я бы переформулировал немного. В Laravel много компонентов, авторами которых являются авторы Symfony. Видимо, так сложилось, что эти компоненты обладают достаточно высоким качеством или иными положительными качествами, которые разработчики Laravel сочли нужными/важными.

    Laravel это форк Symfony?
    Нет.

    Есть стандартный (аки стандарт) формат переносимого пакета. Такой пакет может использоваться практически в любом приложении (PHP-приложении, в данном случае). А Symfony - фреймворк модульный (а с версии 4 - ещё более модульный). В результате чего, симфони порвали на лоскуты разобрали на пакеты многие проекты/разработчики. Вот собственно, и результат...
    Ответ написан
    6 комментариев
  • Как приложение на Laravel разбить на независимые части?

    Wolfnsex
    @Wolfnsex
    Если не хочешь быть первым - не вставай в очередь!
    Пространство приложения - это его код непосредственно, т.е. в первую очередь. Иными словами, "общий" функционал в пространство приложения обычно не пихают. Если Вы создаёте какой-то общий модуль, есть смысл вынести его в пакет, для возможности последующего использования в будущем.

    Второй вариант - есть масса различных расширений для лары, позволяющих делить приложение на независимые части. В том числе, мне попадались на глаза пакеты позволяющие работать в ларе с помощью механизмов аналогичных Symfony (Bundle), или например, вот такой вариант.
    Ответ написан
    Комментировать
  • Не получается установить eloquent-sluggable?

    Wolfnsex
    @Wolfnsex
    Если не хочешь быть первым - не вставай в очередь!
    Идём на страницу пакета и смотрим: 5a5ce90bb4fd1760950840.png

    P.S. composer require cviebrock/eloquent-sluggable:^4.3 - для версии 4.3.х - картина ровно аналогичная.
    Ответ написан
    2 комментария
  • Как правильно построить условие?

    Wolfnsex
    @Wolfnsex
    Если не хочешь быть первым - не вставай в очередь!
    Затем коллекцию прогоняю через foreach(кстати, как это правильно называется?
    Это называется "обход в цикле" (один из вариантов названия "этого").

    в цикле ставлю условие, если поле role_id не равняется "1"
    У Вас это условие когда-нибудь выполняется, хотя бы раз? P.S. При сравнении с цифрой, т.е. вот в таком варианте - if($s->role_id != '1') - "1" не обязательно оборачивать в кавычки, и наверное, лучше будет даже не оборачивать 1 в кавычки, если "1" - это именно (всегда) цифра.

    Ну и в целом, я бы рекомендовал Вам воспользовать двумя чудесными штуковинами из Laravel:
    1. Eloquent
    2. Аутентификация и авторизация - их прелесть в том, что механизм полностью модульный и Вы с минимальными телодвижениями можете использовать уже готовую систему, выбирая из нее только те части, которые Вам нужны, либо же, сразу использовать готовую систему, от регистрации до восстановления паролей.

    В т.ч. вот тут есть очень неплохие уроки про основы Laravel, там же есть 15-ый урок, на тему аутентификации (бесплатный).
    Ответ написан
  • Как настроить Laravel или SleepingOwlAdmin так, чтобы в проекте не было фронтенда?

    Wolfnsex
    @Wolfnsex
    Если не хочешь быть первым - не вставай в очередь!
    везде есть стартовая welcome страница.
    Удалите роут, который отвечает за отображение этой страницы и всё... больше её не будет.
    Ответ написан
  • Требуются не используемые переменные в blade-шаблоне?

    Wolfnsex
    @Wolfnsex
    Если не хочешь быть первым - не вставай в очередь!
    Если отправить в дочерний шаблон переменную adverts из контроллера то ошибки не будет. Но я не думаю что это будет хорошим решением. Как правильно здесь поступить?
    Если я правильно Вас понял и мне не изменяет память - это довольно старая ошибка Laravel/Blade, которая заключается в том, что переменные "разворачиваются" раньше, чем переопределяются секции в шаблоне. Подозреваю, что её до сих пор не исправили.

    Как поступить, варианты:
    1. Сделать из "main"а шаблон без переменных, наследуя от него другие шаблоны и передавать переменные в них
    2. Сделать как Вам предложили выше, т.е. передавать переменную глобально
    3. Передавать переменную везде, где её "не хватает", не смотря на то, что она по факту использовать не будет

    Я расположил варианты в том порядке, в котором бы их использовал я :)
    Ответ написан
    Комментировать
  • Как подключить библиотеку fpdf в laravel?

    Wolfnsex
    @Wolfnsex
    Если не хочешь быть первым - не вставай в очередь!
    На этой странице написано как (P.S. через composer)
    Ответ написан
    4 комментария