Модульная структура в проекте с использованием фреймворка Laravel. Часть 1
Вставка
- Опубліковано 24 жов 2019
- Разработка веб-приложения на PHP. Посмотрите уроки: webformyself.com/minikurs/php...
Исходники к уроку тут: webformyself.com/modulnaya-st...
Модульная структура архитектуры проекта - отличное решение для крупных и развивающихся приложений. Но, если говорить о фреймворке Laravel, то из «коробки» поддержки подобного способа организации кода нет. Поэтому в данном и следующем видео Вы увидите, как с нуля добавить поддержку модульности в приложение написанное с использованием фреймворка Laravel.
Хотелось бы отметить, что модульное программирование - это организация кода проекта, как совокупности множества отдельных элементов-модулей. При этом, как правило, каждый из них обладает собственным функционалом и возможностями.
По умолчанию во фреймворке Laravel указанная возможность не заложена и поэтому придется создавать ее вручную. Конечно, в данное время есть уже готовые пакеты, которые добавляют оговоренную выше функциональность, но хочется показать Вам как это можно реализовать самостоятельно.
Таким образом, непосредственно в этом уроке мы добавим код, который будет поддерживать работу с отдельными модулями во фреймворке Laravel. А в следующем, создадим консольную команду, благодаря которой, можно будет быстро генерировать заготовки будущих модулей.
Спасибо Виктор, все ваши видео затрагивают нужные темы, через которые каждый будет проходить со временем, видно что сами через это прошли и спасибо что делитесь с нами 👍
Пожалуйста!
Так и есть в практической работе, постоянно сталкиваешся с новыми задачами.
Одно из лучших видео о модульности в Ларавел. Спасибо!
Для автозагрузки классов модулей надо использовать psr-4, а не менять путь в сервис провайдере, это костыли.
В сервис провайдере путь не менялся, было изменено дефолтное пространство имен для контроллеров ,которые описаны в маршрутах. Это можно было и не делать, но тогда пришлось бы в маршрутах модулей, прописывать пространства имен для каждого контроллера, что не удобно. Намного удобней, просто писать имя контроллера и все. Автозагрузка psr-4 и так используется фо фреймворке. И опять же в уроке я не однократно говорил, что реализовать подобное, можно различными способами и предложенный мной вариант это один из них.
@@user-of4dc3rh5c Если исключить то что метод подключения роутов в принципе неправильный, то пространство имен можно прописать в группе, а все остальные писать "удобно".
Спасибо за ваши труды))
Пожалуйста!
Спасибо Вам
Пожалуйста
12:21 Упорно пытаюсь сделать как вы сказали, создать модель в папке модуля, но у меня он создает папку в папке app/models/
Спасибо, а то я задолбался с рабочим монолитом. Гремучая смесь без тестов и документации : laravel, blade, js, vue
Подскажите, а реально сделать модули как в Joomla на Laravel? Является ли данное решение чем-то похожим?
Очень хорошая идея, Нужно только доработать чтоб:
site.ru/blogs считывал с папки Public
site.ru/Admin/blogs считывал с папки Admin
Было бы неплохо еще подключить в модуль шаблоны Views. Т.к. любой модуль подразумевает еще и отдельные шаблоны. Это можно сделать аналогичным образом, как и подключение роутов, только в файле config/view.php. Необходимо добавить пути к шаблонам модулей в массив paths.
У меня выдает ошибку: BadMethodCallException in Macroable.php line 74:
Method namespace does not exist.
Ничего не могу сделать. Как исправить?
При удалении этой строки пишет другую ошибку:
Route::namespace("Modules\\$mod\\$sub\Controllers")->group ($routesPath);
ne delai po etomu videouroku javliajus middle laravel developer i videl raznie proekti... On sam daze na urovne junior ne znaet laravel luchshe www.laracast.com tut proidi!
Помогите ещё, как нужно настроить Open Server, какой путь прописать для данного домена? Потому что при вводе /faqs выходит страница "Объект не найден", причём ни с дизайном под Laravel, как на видео, а обычная виндовозная
Фронт контроллер находится в папке public. К этой папке и надо прописать путь. И забудьте за опенсервер если хотите заниматься бекендом. У ларавель есть свой сервер, либо настройте доккер. На гитхабе есть куча сборок доккера на любой вкус.
Вот этот весьма простой и самодостаточен для запуска разработки проекта на ларавель:
github.com/OreyM/Laravel-Docker-Nginx-version
Ну правда докер под виндой тот ещё мазохизм... С правами придется немного помучиться
@@mugen31337 Предлагаешь мазохизм вместо готового решения с опенсервером...
@@andreyk6745 опенсервер, это не готовое решение. Это костыль и эмуляция
@@mugen31337 ну хз, если надо быстро поставить серв со всем нужным, то проще поставить опенсервер за 5 минут, чем потратить кучу времени чтобы мучаться с докером. а как он работает меня не касается, если это не создает проблем и все работает быстро и как надо, я же не на продакшн ставлю его)
@@andreyk6745 докер ставится секунд 10... Но точно быстрее опенсервера. На гитхабе сборки на любой вкус. А среда приближенная к боевой
плиииииииизз про микросхемы тоже урок запишите или модуль и микросхема одной и тоже ?
А что насчёт представлений? Они так и сваливаются во views?
Собственно, да, в текущей реализации, представления располагаются в каталоге views, каждый в отдельной папке
@@user-of4dc3rh5c получается и миграции тоже, тогда не совсем ясно зачем разбивать на модули уже подписанные и лежащие на своём месте файлы, когда для переноса все равно придётся собирать все с разных мест, смысл модульности или теряется или невозможен в условиях работы фреймворка на MVC. Я не так себе представлял переиспользованние модулей или я чего-то не понимаю?
@@imvasha В текущей реализации так. Но Вам ни кто не запрещает это доработать. Миграции также можно разложить по папкам. А затем применять не все сразу а поочередно, используя параметр --path. Или в сервис провайлере определить места где лежат миграции. В два урока сложно уложиться, создавая идеальное приложение. Я ж говорил в начале первой части что это только один из вариантов подобной структуры
@@imvasha ну потому что модульность в ларке здесь представлена не совсем верно. Тут просто рассказано, что есть такая архитектура, ее можно реализовать в ларавель и это можно сделать, например, с такими костылями.
А так, модульность надо реализовывать через композер.
Просто прежде чем начинать изучать лару, поймите для себя одно - это компонентный фреймворк. Это не монолит, по типу кодигнайтера, зенда или ии. Он построен на взаимозаменяемых компонентах (модулях), расширяем за счёт них. Поэтому в app стройте приложение, придерживаясь парадигме mvc, реализацию модульности надо делать немного по-другому.
@@mugen31337 а как в композере сделать работу с моделью App\User? Например в своем модуле я захочу проверить баланс пользователя, но объект пользователя в контексте моего пакета неизвестен, как и другие модели приложения
Будет ли курс по Laravel?
Возможно :)
Если нужен годный курс, реально годный, ищите курс от Елисеева
@@mugen31337 а где можно посмотреть его работы на ларавел?
@@imvasha я не за работы говорю, а за курсы.так и пишите курс по ларавел Елисеев. У него же есть про симфони. И в свое время очень годный курс по yii. Они все платные. Так же у него шикарный бесплатный курс по разработке psr-фреймворка и я бы рекомендовал начинать с него.
@@mugen31337 спасибо
Подскажите, где найти содержимое папки vendor, её нет в исходниках. Заранее спасибо)
она появится после установки проекта команда: composer install
@@NekapitAl то есть надо ввести composer install просто? Что вообще нужно сделать, чтобы появилось то, что уже есть в начале урока?
@@Tivew понятия не имею бо сам урок я не смотрел))) я просто ответил на твой вопрос. Да, переходишь в консоли в каталог с проектом и вводишь команду composer install - он тебе все зависимости в папку vendor и установит :)
@@NekapitAl Спасибо большое) Вроде что-то получилось
принцип KISS - в папке Controllers ожидаются контроллеры, в папке Models - модели, web - пути. В папке Modules/Admin? Лично Вы ожидаете структуру MVC и относите к панели админа (AdminPanel тогда?). А другому надо будет открыть каталог (а именно то что Вы назвали модулем это каталог) и вникать в структуру, сверяясь с кодом. Проще ли будет код, когда модулей станет 100 и по 10-20 подмодулей (каждый новый модуль исправление кода логики в web.php?)? Насколько web.php (или куда будет вынесена логика обработки путей и пространств имен) "раздуется"?
Смысл ломать то, что предоставляется фреймворком? В Controllers и Models создаются каталоги AdminPanel, Login, Auth, Blog , Editors и т.п. Да, по папка в Controllers и папка в Models. Зато всем, кто работает с Laravel будет понятно что в папке AdminPanel которая в Controlles и аналогично с Models.
Хотя я всего лишь джун и наверное не прав...
Главный смысл модульности, который предлагает автор, это возможность легко взять модуль, и перенести в другой проект. А если все сделать, как предлагает фреймворк, это сделать будет невозможно, т.к. наверняка, будет присутствовать большая связанность со всем монолитом.
Никогда не пишите логику в роутах. Получите по рукам!
+ закэшировать роуты не получится
Обычно после такого надо писать "вот я бы сделал так: ...", а ты не поясняешь почему так, может это только твой "стиль"
@@andreyk6745 Нужно сделать Сервис Провайдер модуля и в него подключать файл роутов модуля. Схема получается такая.. в общее приложение подключается СП модуля который подключает все остальное. Файл роутов не для логики и не приходится "ломать" стандартный РоутСП.
Pravilno logiku nuzna v controllere propisat.
верните дизлайки
Я не понимаю зачем усложнять,зачем вы от тебя тину несет,чем короче путь тем лучше,вы потом сами во все запутайтесь,ладно вы,а если другой программист будет разбираться,он вообще нечего не поймет,если вы уже делаете ошибки,а что будет дальше?
видео возможно не плохое, но звук полное Г
Материал классный но слушать невозможно из-за неграмотной абсолютно речи:
не модулЕй ,а мОдулей
не группИровать, а группировАть
Грамотный нашелся, иди смотреть, по таймкоду ua-cam.com/video/AGFuNWM_lxg/v-deo.html
gramma nazi
@@anmaner4822 Ну ка! Фу!