2013-08-08 14 views
9

Sto iniziando a lavorare con Laravel 4, mi sembra un'ottima scelta, comunque prima di programmare il mio primo progetto mi piacerebbe capire se il mio approccio abituale potesse andare bene con laravel.Laravel 4 - Pacchetto o "moduli"?

Di solito tengo triade per backend e frontend separati in una cartella/moduli, in questo modo:

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

Con laravel Io non sono davvero sicuro di come gestire questo. Sto provando con i pacchetti, ma lo php artisan workbench me/mypackage --resources non crea l'intera struttura delle cartelle ... dove mettere controller e modelli e come impostare i percorsi?

Quindi ho trovato questo link per abilitare il sistema simile ai moduli. Quindi, qual è l'approccio che dovrei seguire per mantenere le cose in modo laravel?

risposta

13

Bene, iniziamo ...

In primo luogo, ho creato Andreyco\Cart pacchetto usando Artisan.
Package e la sua struttura

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

Nelle risposte, userò questo pacchetto esatto come esempio.

Immaginate che quella cartella workbench/andreyco/cart/src sia la cartella dell'applicazione. Se lo fai, dovresti sapere la maggior parte delle risposte. (In realtà App è pacchetto così)

D:come impostare percorsi
A: Creare il file ->workbench/andreyco/cart/src/routes.php. Questo è fatto.

D:dove mettere i controller e modelli
A: Basta creare controllers e models cartella lì.
Quindi il TestController si troverà nel file workbench/andreyco/cart/src/controllers/TestController.php. Lo stesso con i modelli.
Directory albero sarebbe simile a questa

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

ho creato il routes.php, TestController.php e il 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}"; 
    } 
} 

Come potete vedere, ho usato gli spazi dei nomi, così si dovrebbe.
Gli spazi dei nomi rendono la vita molto più semplice.

Importante: dopo la creazione di questi file, è necessario aggiornare composer.json file, in modo che le classi potrebbero essere autocaricate

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

Dopo questo, eseguire il dump dei cambiamenti usando composer dump-autoload -o comando.

Q:Quindi, qual è l'approccio che dovrei seguire per mantenere le cose in modo laravel?
A: A mio parere, è necessario attenersi ai pacchetti. Almeno, lo farei. Questo è il modo in cui Laravel è stato progettato per funzionare.

Spero che questo ti aiuti, buona fortuna!

Modifica
Le viste non sono un problema qui. Funzionano proprio come nel pacchetto principale dell'app.

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

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

Tornando vista dal controllore di pacchetto è piuttosto semplice

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

Grazie si Andrej. E 'stato davvero d'aiuto! Quindi, i percorsi devono essere assegnati a un nome, ma perché il doppio taglio? – Luciano

+1

La doppia barra rovesciata è usata per uscire dal carattere '\'. Qualcuno mi corregge, se sbaglio. Laravel lo traduce correttamente nello spazio dei nomi – Andreyco

+0

Apparentemente ho dimenticato di sfuggire al carattere '\' nel commento precedente. – Andreyco