douglaszuqueto / laravel-5.1-ddd
Laravel DDD 5.1
Installs: 13
Dependents: 0
Suggesters: 0
Security: 0
Stars: 14
Watchers: 2
Forks: 1
Open Issues: 0
Type:project
Requires
- php: >=5.5.9
- laravel/framework: 5.1.*
Requires (Dev)
- fzaninotto/faker: ~1.4
- mockery/mockery: 0.9.*
- phpspec/phpspec: ~2.1
- phpunit/phpunit: ~4.0
This package is not auto-updated.
Last update: 2025-03-24 15:03:32 UTC
README
Passo a passo de como organizar uma aplicação default Laravel para arquitetura DDD
- 1º Recorte todos arquivos de dentro da pasta app;
- 2º Crie uma pasta chamada Core(dentro da pasta app) e cole todos os arquivos recortados;
- 3º Renomeie todos os namespaces dos arquivos contidos dentro da pasta Core para App\Core\
- 4º Na mesma pasta do passo anterior, na pasta Providers, abra o RouteServiceProvider e procure pelo trecho; "require app_path('Http/routes.php');", observe que o path não é mais esse, pois agora esse arquivo está dentro da pasta Core, então mude o path para require app_path('Core/Http/routes.php');
- 5º Voltando a raiz do projeto, pasta bootstrap abra o arquivo app.php;
$app->singleton( Illuminate\Contracts\Http\Kernel::class, App\Http\Kernel::class ); $app->singleton( Illuminate\Contracts\Console\Kernel::class, App\Console\Kernel::class ); $app->singleton( Illuminate\Contracts\Debug\ExceptionHandler::class, App\Exceptions\Handler::class );
Logo de cara, como fizemos no passo anterior, acrescente no namespace o Core.
Veja o resultado:
$app->singleton( Illuminate\Contracts\Http\Kernel::class, App\Core\Http\Kernel::class ); $app->singleton( Illuminate\Contracts\Console\Kernel::class, App\Core\Console\Kernel::class ); $app->singleton( Illuminate\Contracts\Debug\ExceptionHandler::class, App\Core\Exceptions\Handler::class );
-
6º Na pasta config(raiz do projeto), abra o arquivo app.php para renomear alguns Service Providers;
De ->
App\Providers\AppServiceProvider::class, App\Providers\AuthServiceProvider::class, App\Providers\EventServiceProvider::class, App\Providers\RouteServiceProvider::class,
Para ->
App\Core\Providers\AppServiceProvider::class, App\Core\Providers\AuthServiceProvider::class, App\Core\CProviders\EventServiceProvider::class, App\Core\CProviders\RouteServiceProvider::class,
-
7º Voltando a pasta app, vamos primeiramente criar um Dominio Base. para isso, crie a estrutura a seguir;
- Domains
- User
- Entities
- User
- Domains
-
8º Crie uma Entidade chamada User, e não esqueça que o namespace deve seguir no seguinte formato: App\Domains\User\Entities, assim respeitando a hierarquia montada;
-
9º Agora vamos criar uma Application, para isso, permanecendo dentro da pasta app, monte a seguinte estutura;
- Applications
- User
- Http
- Controllers
- UserController.php
- routes.php
- Controllers
- Providers
- UserServiceProvider.php
- Http
- User
- Applications
O Arquivo UserServiceProvider, é o principal arquivo de configuração dessa Application, nela você vai apontar o caminho dos Controllers bem como o arquivo de rota;
Abaixo, veja o arquivo completo.
<?php namespace App\Applications\User\Providers; use Illuminate\Routing\Router; use Illuminate\Support\ServiceProvider; class UserServiceProvider extends ServiceProvider { protected $namespace = 'App\Applications\User\Http\Controllers'; public function boot(Router $router) { $this->registerRoutes($this->app['router']); } /** * Register the service provider. * * @return void */ public function register() { } protected function registerRoutes(Router $router) { $router->group(['namespace' => $this->namespace], function ($router) { require app_path('Applications/User/Http/routes.php'); }); } }
Feito isso, não esqueça de registrar o ServiceProvider no arquivo config/app.php.
App\Applications\User\Providers\UserServiceProvider::class,
- 10º Rode o projeto com o artisan ou com um servidor externo e veja se está tudo funcionando corretamente. Caso queira uma iteração maior, crie uma rota e um controller e teste a aplicação.