Wkomponowanie kilku mniejszych projektów Laravel, w jeden główny

0

Dzień dobry.

Mam dwa projekty: blog oraz ksiegaGosci. Projekty są całkowicie osobnymi projektami Laravela. Chciałbym dołączyć oba do trzeciego, Głównego. Chciałbym, wpisując komendę:

php artisan serve

wywołaną z katalogu Projektu Głównego, mieć dostęp do obu na raz przy założeniu, że nadane ścieżki w pliku web.php dla każdego z projektów są różne (nie nadpisują się).

Jak to można zrobić? Znalazłem takie coś: https://stackoverflow.com/questions/34356663/how-to-handle-routes-of-two-laravel-projects-on-one-domain-or-server ale nie działa, poza tym mi chodzi o to, bym mógł wrzucić foldery obu projektów do projektu głównego i móc z nich korzystać.

Proszę o pomoc.
Dzięki.

0

@mpaw: Jeżeli chcesz wrzucić dwa projekty laravel do jednego (skopiowanie plików) to oczywiście możesz to zrobić tylko musisz zachować strukturę bazy zarówno dla jednego jak i drugiego projektu, strukturę katalogów (chociaż jak nie będzie taka sama ta struktura to będziesz miał mały syf) no i oczywiście routy. Nie wiem z czym masz tu problem za bardzo :)

P.s. No i zwróć uwagę na to, czy jest ta sama wersja Laravela.

0

@leonpro778:
Dzięki za odpowiedź. Tak, baza będzie współdzielona tak, by nie powodować konfliktów. Jednak w jaki sposób i co należy zmodyfikować w folderze Aplikacji Głównej, by można było jednym poleceniem: php artisan serve załadować cały projekt wraz z logiką sub-projektów?

Chodzi mi o to, by załadował się dostęp do kontrolerów sub-projektów, z poziomu projektu Głównego, oraz żeby wewnętrznie sub-projekty widziały swoje lokalne modele i widoki.

Dzięki
M.

PS.
Dodam, że chyba nie ma sensu kopiować całego projektu, wraz z katalogiem vendor. Katalog vendor będzie w projekcie głównym, a sub-projekty musiałyby jakoś widzieć go. Tylko co i jak zmodyfikować? :)

0

@mpaw: To zależy jaką masz strukturę katalogów. Wiadomo, katalog vendor, config, database zostaje jeden. Nie wiem jaką masz strukturę, może pokaż przykładowe routy z jednego i z drugiego projektu

2

Wygląda na to, że te Twoje podaplikacje należy przerobić na paczki dla larevela. Composer potem dogra je do projektu głównego.
Ja nie robiłem paczek i takiej przeróbki, ale wydaje się być to najlepsza droga.
artisan serv pod spodem odpala wbudowany w PHP serwer deweloperski. Jakbyś zrobił php -S loclalhost:<nr portu>
https://www.php.net/manual/en/features.commandline.webserver.php
Taki serwer nie ma on opcji czytania plików typu .htaccess tym samym niczego w ten sposób nie usatwisz.
Możesz pokombinować z jakimś Apache czy innym nginxem. Ale jak to paczki do głównej aplikacji to raczej idź w stronę przeróbki kodu.
Nie robiłem paczek do Laravel, to nie pomogę w tym zakresie, ale dokumentacja ciężko nie wygląda
https://laravel.com/docs/9.x/packages

0

@jurek1980: Dzięki, poczytam o tych paczkach.

@leonpro778: Już pokazuję. Używam Laravel 8.75.
Tworzę projekty przy przy pomocy polecenia php composer create-project --prefer-dist laravel/laravel nazwaProj "8.*"

Struktura projektu:

nazwaProj
+app
+bootstrap
+config
+database
+public
+resources
+subproj <--- tutaj chcę wrzucić sub-projekty
+route
+storage
+tests
+vendor
.editorconfig
.env
.env.example
...
artisan
composer.json
etc....```
1

Każda instacja larevela ma swój plik typu env. Swój wygenerowany klucz, mechanizmy od sesji i CSRFa i pewnie jeszcze inne rzeczy o których nie pomyślałem teraz. Przy próbie korzystania z jednej bazy danych to wszystko może Ci się gryźć między sobą, a przeróbki pod odpalenie tego w taki sposób mogą zająć dużo więcej czasu niż myślisz.

0

@jurek1980: Dzięki za odpowiedź. A czy nie można jakoś wymusić, aby wszystkie sub-projekty korzystały z tego samego .env?

1

No możesz. W końcu to zmienne środowiskowe. Podstawisz klucz etc. Tylko potem coś zmieni się w jednym projekcie i może mieć wpływ na drugi. Bardziej chodziło mi o sesję i mechanizmy bezpieczeństwa. Zapytam jeszcze w jakim celu to chcesz robić? Nauka, zabawa? Bo jak tak to kombinuj.

0

@jurek1980:
Nauka przed rozpoczęciem nowej pracy. Przyszły szef poprosił mnie żebym zapoznał się z Laravelem, z którego będziemy korzystać w pracy. Uczę się go od kilku tygodni. Szef poprosił, bym po stworzeniu aplikacji blog i ksiegaGosci, które stworzyłem, połączył je w jedną. Dzwoniłem dziś do Niego i powiedział, że na upartego mogą to być paczki, o ile da się wywoływać kontrolery paczki, poza nią. I da się, bo sprawdziłem, trzeba tylko albo podać w pliku routes/web.php kompletną przestrzeń nazw i po niej nazwę kontrolera, albo, żeby za każdym razem nie wpisywać przestrzeni, zrobić sztuczkę:

W pliku: app/Providers/RouteServiceProvider.php
Zmodyfikować metodę boot() podając jej na sztywno przestrzeń i nowy plik routes/web<N>.php (ja sobie wymyśliłem web2.php, ale można wpisać dowolną nazwę):

public function boot()
{
    $this->configureRateLimiting();

    $this->routes(function () {
        Route::prefix('api')
            ->middleware('api')
            ->namespace($this->namespace)
            ->group(base_path('routes/api.php'));

        Route::middleware('web')
            //->namespace($this->namespace)
            ->namespace('App\Http\Controllers') // <-----------------------------------------
            ->group(base_path('routes/web.php'));

        Route::middleware('web')
            //->namespace($this->namespace)
            ->namespace('Przestrzen/Pakietu') // <-----------------------------------------
            ->group(base_path('routes/web2.php'));
    });
}

W pliku web2.php definiuję nową ścieżkę i mogę w nim odwołać się do kontrolera pakietu. Mało eleganckie rozwiązanie, ale coś jest :P

PS.
Szef powiedział, że jeżeli zrobię to na pakietach (przerobię apki blog i ksiegaGosci na pakiety) i wkomponuję je w nową apkę, to na upartego mu to nie przeszkadza. Ale wolałby, żeby można było wkleić zasadniczy fragment całego projektu (dowolnego) i bez przeróbek móc go wykorzystywać w aplikacji.

0

To co opisałeś to prawie dodanie paczki. Jak w dokumentacji.
Jeśli to ćwiczenie, to może chodzi właśnie o modularność. Niektóre aplikacje budowane są w ten sposób. Napiszesz sobie paczkę do jakiejś czynności i potem dodajesz ją do innych w tym istniejących projektów. Wtedy szef za uruchomienie dodatkowego pakietu weźmie 100 cebulionów żeby potem Tobie dać 10.

0

@jurek1980: Tak, szefowi chodzi o modularność. Ale o pieniądze na pewno nie chodzi, przynajmniej nie w tym sensie, bo będę pracować na umowę ze stałą pensją. Poza tym to mój kolega i szanujemy się poza pracą również :)

0

No to musisz to przerobić na paczkę, stworzyć opis zależności dla composera tak by to można było dodawać do projektów.

0

Nie wiem nic o Laravel ale zobacz to:
https://laravel.com/docs/9.x/packages

1 użytkowników online, w tym zalogowanych: 0, gości: 1