laravel-5.2-ddd maintained by douglaszuqueto
Laravel 5.2 - DDD
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.