quinta-feira, 19 de dezembro de 2019

Organizando melhor os Models dentro do Laravel



Organizando melhor os Models dentro do Laravel

Muitas vezes me eu quero deixar a minha estrutura de projeto mais organizada e o Laravel deixa os Models meio soltos dentro do projeto.

Por padrão, os modelos estão localizados na pasta  App do aplicativo, o que pode se tornar uma bagunça se você estiver trabalhando em um aplicativo grande. 
Então, decidi organizar meus modelos dentro de App\Models

Atualizando o Model User

Para conseguir isso, a primeira coisa que temos que fazer é mover para a App/Models e atualizar o namespace de acordo.
Isso requer que você atualize todos os arquivos que referenciam a App\User. O primeiro é config/auth.php:

  'provider' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\Models\User :: class, // alterado
        ],
    ],
então o config/services.php:
   
'stripe' => [
        'model' => App\Models\User:: class, // alterado
        'key' => env ('STRIPE_KEY'),
        'secret' => env ('STRIPE_SECRET'),
    ],
e por último, mas não menos importante, o database/factories/UserFactory.php

$factory->define(App\Models\User::classe, function(Faker $faker) {
        return [
        'name' => $faker->name,
        'email' => $faker->unique()->safeEmail,
        'email_verified_at' => now(),
        'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password
        'remember_token' => Str::random(10),
    ];
});

Gerando Models daqui para frente


Agora, precisamos alterar para a geração de novos arquivos dentro da pasta Models 

Para corrigir isso, podemos estender o arquivo padrão ModelMakeCommand  
e criar um novo arquivo dentro de App\Console\Commands

<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use App\Console\Commands\ModelMakeCommand;
class AppServiceProvider extends ServiceProvider
{
  /**
    * Bootstrap any application services.
    *
    * @return void
    */
  public function boot()
  {
      //
  }
  /**
    * Register any application services.
    *
    * @return void
    */
  public function register()
  {
      $this->app->extend('command.model.make', function ($command, $app) {
          return new ModelMakeCommand($app['files']);
      });
  }
}

Após isso é só criar uma ligação dentro do App\Providers\AppServiceProvider.php

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
\\Aqui tbm precisa adicionar
use App\Console\ModelMakeCommand\Command;

class AppServiceProvider extends ServiceProvider
{
    /**
    * Register any application services.
    *
    * @return void
    */
    public function register()
    {
        //
    }

    /**
    * Bootstrap any application services.
    *
    * @return void
    */
    public function boot()
    {
        //adicionar essa parte
        $this->app->extend('command.model.make', function ($command, $app) {
            return new ModelMakeCommand($app['files']);
        });
    }
}

Nenhum comentário:

Postar um comentário