2013-08-08 16 views
9

Zaczynam pracować z Laravel 4, wydaje mi się, że jest to świetny wybór, przed napisaniem mojego pierwszego projektu, który chciałbym zrozumieć, jeśli moje zwykłe podejście może być w porządku z laravel.Laravel 4 - Pakiet lub "moduły"?

Zazwyczaj zachować triadę dla backend i frontend oddzielonym pod folderze/modules, na przykład:

/modules 
     /backend 
       /config 
       /controllers 
       /models 
       /migrations 
       /ecc.. 
     /frontend (and so on...) 

Z laravel nie jestem pewien, w jaki sposób poradzić sobie z tym. Próbuję z pakietami, ale php artisan workbench me/mypackage --resources nie buduje całej struktury folderów ... gdzie umieścić kontrolery i modele oraz jak skonfigurować trasy?

Następnie znalazłem to link, aby umożliwić system podobny do modułów. Jakie jest więc podejście, które powinienem stosować, aby zachować rzeczy w sposób laravel?

Odpowiedz

13

Dobrze, zacznijmy ...

Najpierw stworzyłem Andreyco\Cart pakiet za pomocą specjalisty.
Pojemniki, to struktura

|workbench 
|-andreyco 
|---cart 
|-----public 
|-----src 
|-------Andreyco 
|---------Cart 
|-------config 
|-------lang 
|-------migrations 
|-------views 
|-----tests 
|-----vendor 

W odpowiedzi, będę używał dokładnie ten pakiet jako przykład.

Wyobraź sobie, że folder workbench/andreyco/cart/src jest folderem aplikacji. Jeśli tak, powinieneś znać większość odpowiedzi. (Faktycznie to pakiet aplikacji, jak również)

Q:jak skonfigurować trasy
A: Tworzenie pliku ->workbench/andreyco/cart/src/routes.php. Zrobione.

Q:gdzie umieścić kontrolery i modele
A: wystarczy utworzyć folder, controllers i models tam.
Więc TestController będzie znajdować się w pliku workbench/andreyco/cart/src/controllers/TestController.php. To samo dotyczy modeli.
drzewo katalog będzie wyglądać następująco

|workbench 
|-andreyco 
|---cart 
|-----public 
|-----src 
|-------Andreyco 
|---------Cart 
|-------config 
|-------controlers 
|-------lang 
|-------migrations 
|-------models 
|-------views 
|-----tests 
|-----vendor 

stworzyłem routes.php, TestController.php i TestModel.php

// workbench/andreyco/cart/src/routes.php 
<?php 

Route::get('test', 'Andreyco\\Cart\\Controllers\\[email protected]'); 



// workbench/andreyco/cart/src/controllers/TestController.php 
<?php namespace Andreyco\Cart\Controllers; 

use Andreyco\Cart\Models\TestModel; 

class TestController extends \BaseController 
{ 
    public function index() 
    { 
     return TestModel::printCurrentLocation(__DIR__); 
    } 
} 



// workbench/andreyco/cart/src/models/TestModel.php 
<?php namespace Andreyco\Cart\Models; 

class TestModel extends \Eloquent 
{ 
    public static function printCurrentLocation($location) 
    { 
     return "Testing package controller, script is located at: {$location}"; 
    } 
} 

Jak widać, użyłem nazw, więc powinieneś.
Przestrzenie nazw ułatwiają życie.

Ważne: po utworzeniu tych plików, trzeba zaktualizować composer.json plik, tak aby zajęcia mogły być ładowane automatycznie

// composer.json 
"autoload": { 
    "classmap": [ 
     ... 
     "workbench/andreyco/cart/src/controllers", 
     "workbench/andreyco/cart/src/models" 
    ] 
}, 

Po tym, zrzucić zmiany za pomocą polecenia composer dump-autoload -o.

P:Więc, w jaki sposób powinienem podążać za utrzymaniem rzeczy w sposób laravel? A: Moim zdaniem powinieneś trzymać się pakietów. Przynajmniej tak. Tak właśnie zaprojektowano Laravel do działania.

Mam nadzieję, że to wam pomoże, powodzenia!

Edytuj
Widoki nie stanowią tu problemu. Działają tak, jak w głównym pakiecie aplikacji.

// workbench/cart/src/view/foldername/viewname.blade.php 

<h1>Testing view file.</h1> 
{{ "Blade" }} syntax is parsed as well, no problem here. 

Wracając widok z kontrolerem pakietu jest całkiem prosta

public function index() 
    { 
     return \View::make('cart::foldername.viewname'); 
    } 
+1

Dziękujemy Andrej. To było naprawdę pomocne! Tak więc trasy muszą mieć nazwę, ale dlaczego podwójne ukośnik? – Luciano

+1

Podwójny ukośnik odwrotny używany jest do uniknięcia znaku '\ '. Ktoś mnie poprawia, jeśli się mylę. Laravel tłumaczy to na przestrzeń nazw poprawnie – Andreyco

+0

Najwyraźniej zapomniałem uciec przed znakiem '\ 'w poprzednim komentarzu. – Andreyco