Модульная структура в проекте с использованием фреймворка Laravel. Часть 1

Поділитися
Вставка
  • Опубліковано 24 жов 2019
  • Разработка веб-приложения на PHP. Посмотрите уроки: webformyself.com/minikurs/php...
    Исходники к уроку тут: webformyself.com/modulnaya-st...
    Модульная структура архитектуры проекта - отличное решение для крупных и развивающихся приложений. Но, если говорить о фреймворке Laravel, то из «коробки» поддержки подобного способа организации кода нет. Поэтому в данном и следующем видео Вы увидите, как с нуля добавить поддержку модульности в приложение написанное с использованием фреймворка Laravel.
    Хотелось бы отметить, что модульное программирование - это организация кода проекта, как совокупности множества отдельных элементов-модулей. При этом, как правило, каждый из них обладает собственным функционалом и возможностями.
    По умолчанию во фреймворке Laravel указанная возможность не заложена и поэтому придется создавать ее вручную. Конечно, в данное время есть уже готовые пакеты, которые добавляют оговоренную выше функциональность, но хочется показать Вам как это можно реализовать самостоятельно.
    Таким образом, непосредственно в этом уроке мы добавим код, который будет поддерживать работу с отдельными модулями во фреймворке Laravel. А в следующем, создадим консольную команду, благодаря которой, можно будет быстро генерировать заготовки будущих модулей.

КОМЕНТАРІ • 55

  • @peaceduke256
    @peaceduke256 4 роки тому +3

    Спасибо Виктор, все ваши видео затрагивают нужные темы, через которые каждый будет проходить со временем, видно что сами через это прошли и спасибо что делитесь с нами 👍

    • @user-of4dc3rh5c
      @user-of4dc3rh5c 4 роки тому

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

  • @maksymdudyk1718
    @maksymdudyk1718 4 роки тому +2

    Одно из лучших видео о модульности в Ларавел. Спасибо!

  • @PixyTech
    @PixyTech 4 роки тому +16

    Для автозагрузки классов модулей надо использовать psr-4, а не менять путь в сервис провайдере, это костыли.

    • @user-of4dc3rh5c
      @user-of4dc3rh5c 4 роки тому

      В сервис провайдере путь не менялся, было изменено дефолтное пространство имен для контроллеров ,которые описаны в маршрутах. Это можно было и не делать, но тогда пришлось бы в маршрутах модулей, прописывать пространства имен для каждого контроллера, что не удобно. Намного удобней, просто писать имя контроллера и все. Автозагрузка psr-4 и так используется фо фреймворке. И опять же в уроке я не однократно говорил, что реализовать подобное, можно различными способами и предложенный мной вариант это один из них.

    • @xxxTSS
      @xxxTSS 4 роки тому

      @@user-of4dc3rh5c Если исключить то что метод подключения роутов в принципе неправильный, то пространство имен можно прописать в группе, а все остальные писать "удобно".

  • @Fenrir-Wolf
    @Fenrir-Wolf 4 роки тому +2

    Спасибо за ваши труды))

  • @1a2x99
    @1a2x99 4 роки тому +1

    Спасибо Вам

  • @user-ff1jx9rc8u
    @user-ff1jx9rc8u 2 роки тому +1

    12:21 Упорно пытаюсь сделать как вы сказали, создать модель в папке модуля, но у меня он создает папку в папке app/models/

  • @romanbush5164
    @romanbush5164 Рік тому +1

    Спасибо, а то я задолбался с рабочим монолитом. Гремучая смесь без тестов и документации : laravel, blade, js, vue

  • @vladashim8927
    @vladashim8927 Рік тому

    Подскажите, а реально сделать модули как в Joomla на Laravel? Является ли данное решение чем-то похожим?

  • @creatingandeditingcae-duce3623
    @creatingandeditingcae-duce3623 4 роки тому

    Очень хорошая идея, Нужно только доработать чтоб:
    site.ru/blogs считывал с папки Public
    site.ru/Admin/blogs считывал с папки Admin

  • @dmitrymyskin2988
    @dmitrymyskin2988 Рік тому

    Было бы неплохо еще подключить в модуль шаблоны Views. Т.к. любой модуль подразумевает еще и отдельные шаблоны. Это можно сделать аналогичным образом, как и подключение роутов, только в файле config/view.php. Необходимо добавить пути к шаблонам модулей в массив paths.

  • @user-iz6mc9ri2d
    @user-iz6mc9ri2d 4 роки тому

    У меня выдает ошибку: BadMethodCallException in Macroable.php line 74:
    Method namespace does not exist.
    Ничего не могу сделать. Как исправить?
    При удалении этой строки пишет другую ошибку:
    Route::namespace("Modules\\$mod\\$sub\Controllers")->group ($routesPath);

    • @arturkhachatryan63
      @arturkhachatryan63 4 роки тому

      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!

  • @Tivew
    @Tivew 4 роки тому

    Помогите ещё, как нужно настроить Open Server, какой путь прописать для данного домена? Потому что при вводе /faqs выходит страница "Объект не найден", причём ни с дизайном под Laravel, как на видео, а обычная виндовозная

    • @mugen31337
      @mugen31337 4 роки тому

      Фронт контроллер находится в папке public. К этой папке и надо прописать путь. И забудьте за опенсервер если хотите заниматься бекендом. У ларавель есть свой сервер, либо настройте доккер. На гитхабе есть куча сборок доккера на любой вкус.
      Вот этот весьма простой и самодостаточен для запуска разработки проекта на ларавель:
      github.com/OreyM/Laravel-Docker-Nginx-version
      Ну правда докер под виндой тот ещё мазохизм... С правами придется немного помучиться

    • @andreyk6745
      @andreyk6745 4 роки тому

      @@mugen31337 Предлагаешь мазохизм вместо готового решения с опенсервером...

    • @mugen31337
      @mugen31337 4 роки тому

      @@andreyk6745 опенсервер, это не готовое решение. Это костыль и эмуляция

    • @andreyk6745
      @andreyk6745 4 роки тому

      ​@@mugen31337 ну хз, если надо быстро поставить серв со всем нужным, то проще поставить опенсервер за 5 минут, чем потратить кучу времени чтобы мучаться с докером. а как он работает меня не касается, если это не создает проблем и все работает быстро и как надо, я же не на продакшн ставлю его)

    • @mugen31337
      @mugen31337 4 роки тому

      @@andreyk6745 докер ставится секунд 10... Но точно быстрее опенсервера. На гитхабе сборки на любой вкус. А среда приближенная к боевой

  • @codeurient
    @codeurient 2 роки тому

    плиииииииизз про микросхемы тоже урок запишите или модуль и микросхема одной и тоже ?

  • @vserdobintsev
    @vserdobintsev 4 роки тому +1

    А что насчёт представлений? Они так и сваливаются во views?

    • @user-of4dc3rh5c
      @user-of4dc3rh5c 4 роки тому

      Собственно, да, в текущей реализации, представления располагаются в каталоге views, каждый в отдельной папке

    • @imvasha
      @imvasha 4 роки тому

      @@user-of4dc3rh5c получается и миграции тоже, тогда не совсем ясно зачем разбивать на модули уже подписанные и лежащие на своём месте файлы, когда для переноса все равно придётся собирать все с разных мест, смысл модульности или теряется или невозможен в условиях работы фреймворка на MVC. Я не так себе представлял переиспользованние модулей или я чего-то не понимаю?

    • @user-of4dc3rh5c
      @user-of4dc3rh5c 4 роки тому +1

      @@imvasha В текущей реализации так. Но Вам ни кто не запрещает это доработать. Миграции также можно разложить по папкам. А затем применять не все сразу а поочередно, используя параметр --path. Или в сервис провайлере определить места где лежат миграции. В два урока сложно уложиться, создавая идеальное приложение. Я ж говорил в начале первой части что это только один из вариантов подобной структуры

    • @mugen31337
      @mugen31337 4 роки тому +1

      @@imvasha ну потому что модульность в ларке здесь представлена не совсем верно. Тут просто рассказано, что есть такая архитектура, ее можно реализовать в ларавель и это можно сделать, например, с такими костылями.
      А так, модульность надо реализовывать через композер.
      Просто прежде чем начинать изучать лару, поймите для себя одно - это компонентный фреймворк. Это не монолит, по типу кодигнайтера, зенда или ии. Он построен на взаимозаменяемых компонентах (модулях), расширяем за счёт них. Поэтому в app стройте приложение, придерживаясь парадигме mvc, реализацию модульности надо делать немного по-другому.

    • @andreyk6745
      @andreyk6745 4 роки тому +1

      @@mugen31337 а как в композере сделать работу с моделью App\User? Например в своем модуле я захочу проверить баланс пользователя, но объект пользователя в контексте моего пакета неизвестен, как и другие модели приложения

  • @user-rx2ut4sn9g
    @user-rx2ut4sn9g 4 роки тому +1

    Будет ли курс по Laravel?

    • @user-of4dc3rh5c
      @user-of4dc3rh5c 4 роки тому

      Возможно :)

    • @mugen31337
      @mugen31337 4 роки тому +1

      Если нужен годный курс, реально годный, ищите курс от Елисеева

    • @imvasha
      @imvasha 4 роки тому

      @@mugen31337 а где можно посмотреть его работы на ларавел?

    • @mugen31337
      @mugen31337 4 роки тому +1

      @@imvasha я не за работы говорю, а за курсы.так и пишите курс по ларавел Елисеев. У него же есть про симфони. И в свое время очень годный курс по yii. Они все платные. Так же у него шикарный бесплатный курс по разработке psr-фреймворка и я бы рекомендовал начинать с него.

    • @imvasha
      @imvasha 4 роки тому

      @@mugen31337 спасибо

  • @Tivew
    @Tivew 4 роки тому

    Подскажите, где найти содержимое папки vendor, её нет в исходниках. Заранее спасибо)

    • @NekapitAl
      @NekapitAl 4 роки тому

      она появится после установки проекта команда: composer install

    • @Tivew
      @Tivew 4 роки тому

      @@NekapitAl то есть надо ввести composer install просто? Что вообще нужно сделать, чтобы появилось то, что уже есть в начале урока?

    • @NekapitAl
      @NekapitAl 4 роки тому

      @@Tivew понятия не имею бо сам урок я не смотрел))) я просто ответил на твой вопрос. Да, переходишь в консоли в каталог с проектом и вводишь команду composer install - он тебе все зависимости в папку vendor и установит :)

    • @Tivew
      @Tivew 4 роки тому

      @@NekapitAl Спасибо большое) Вроде что-то получилось

  • @daanl88l
    @daanl88l 3 роки тому +2

    принцип 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.
    Хотя я всего лишь джун и наверное не прав...

    • @dmitrymyskin2988
      @dmitrymyskin2988 Рік тому

      Главный смысл модульности, который предлагает автор, это возможность легко взять модуль, и перенести в другой проект. А если все сделать, как предлагает фреймворк, это сделать будет невозможно, т.к. наверняка, будет присутствовать большая связанность со всем монолитом.

  • @mugen31337
    @mugen31337 4 роки тому +10

    Никогда не пишите логику в роутах. Получите по рукам!

    • @zlodes01
      @zlodes01 4 роки тому

      + закэшировать роуты не получится

    • @andreyk6745
      @andreyk6745 4 роки тому

      Обычно после такого надо писать "вот я бы сделал так: ...", а ты не поясняешь почему так, может это только твой "стиль"

    • @xxxTSS
      @xxxTSS 4 роки тому

      @@andreyk6745 Нужно сделать Сервис Провайдер модуля и в него подключать файл роутов модуля. Схема получается такая.. в общее приложение подключается СП модуля который подключает все остальное. Файл роутов не для логики и не приходится "ломать" стандартный РоутСП.

    • @arturkhachatryan63
      @arturkhachatryan63 4 роки тому

      Pravilno logiku nuzna v controllere propisat.

  • @vitaliylufter8765
    @vitaliylufter8765 Рік тому +1

    верните дизлайки

  • @Tornado-ln7fq
    @Tornado-ln7fq 3 роки тому +2

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

  • @NovaNotes
    @NovaNotes 2 роки тому

    видео возможно не плохое, но звук полное Г

  • @KibokoKwembamba
    @KibokoKwembamba 4 роки тому +2

    Материал классный но слушать невозможно из-за неграмотной абсолютно речи:
    не модулЕй ,а мОдулей
    не группИровать, а группировАть

    • @anmaner4822
      @anmaner4822 3 роки тому +1

      Грамотный нашелся, иди смотреть, по таймкоду ua-cam.com/video/AGFuNWM_lxg/v-deo.html

    • @Frie666
      @Frie666 3 роки тому

      gramma nazi

    • @revdalakeyandexru
      @revdalakeyandexru 2 роки тому

      @@anmaner4822 Ну ка! Фу!