Mudar o namespace dos controllers no Laravel 9
Nas versões antigas do Laravel nós chamávamos os controllers nas rotas da seguinte maneira.
Route::get('/user', 'UserController@index');
Mas perceba que falta ali o namespace, porque se eu deixar assim, o Laravel não vai saber onde pegar esse controller chamado UserController
, mas para isso já vem por padrão no arquivo RouteServiceProvider.php
a propriedade protected $namespace = 'App\Http\Controllers';
Veja que essa propriedade tem o caminho até a pasta onde estão os controllers, então automaticamente o Laravel usava essa propriedade para carregar os controllers usados no arquivo web.php
.
Mas no Laravel 8 essa propriedade veio comentada, então para chamar os controllers da maneira citada acima, eu preciso ir lá no RouteServiceProvider
e descomentar essa propriedade $namespace,
simples assim, veja como ficou essa classe.
<?php
namespace Illuminate\Foundation\Support\Providers;
use Closure;
use Illuminate\Contracts\Routing\UrlGenerator;
use Illuminate\Routing\Router;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Traits\ForwardsCalls;
/**
* @mixin \Illuminate\Routing\Router
*/
class RouteServiceProvider extends ServiceProvider
{
use ForwardsCalls;
/**
* The controller namespace for the application.
*
* @var string|null
*/
protected $namespace = 'App\Http\Controllers';
/**
* Resto do código
*
*/
}
Agora no Laravel 9 a coisa mudou bastante, assa propriedade não está mais lá, mas se você investigar um pouco mais vai ver que elá está na classe pai, também com o nome RouteServiceProvider
, então você vai nessa classe e coloca para a propriedade $namespace o caminho(namespace) dos controllers, ficando assim: protected $namespace = 'App\Http\Controllers';
Tem mais uma coisinha que você precisa fazer, que é voltar na classe RouteServiceprovider,
não a onde está a propriedade $namespace,
e sim na outra, você vai ver que nessa classe tem o método boot, e nesse método boot tem o seguinte.
public function boot()
{
$this->configureRateLimiting();
$this->routes(function () {
Route::middleware('api')
->prefix('api')
->group(base_path('routes/api.php'));
Route::middleware('web')
->group(base_path('routes/web.php'));
});
}
Ali no Route::middleware('web')
você coloca a chamada do namespace, ficando assim:
public function boot()
{
$this->configureRateLimiting();
$this->routes(function () {
Route::middleware('api')
->prefix('api')
->group(base_path('routes/api.php'));
Route::middleware('web')
->namespace($this->namespace)
->group(base_path('routes/web.php'));
});
}
Pronto, agora você já pode chamar os controllers como chamávamos antigamente.
Agora veja a aula que preparei sobre o assunto.
Se quiser conhecer meu trabalho mais a fundo, visite meu canal no YouTube e veja meus cursos completos clicando nos links abaixo.
🔥Canal no YouTube: Ir para o canal no YouTube
🔥Veja meus cursos disponíveis: Ir para a lista de curso
0 Comments