Laravel Routes Group
Selam Laravel dostları. Laravel‘in bize sunduğu güzelliklerden biriside gelişmiş Routes yapısı. Laravel standart olarak web ve api olmak üzere iki group halinde yükleniyor. Web ve api gibi routes group katmanı ekleme şansıda tanıyor.
Birkaç projede bu imkanı değerlendirmiş ve URL’leri ayırmak için api içinde gorup açmak yerine api gibi bir group açmıştım. Bu özellik bize, daha okunaklı URL’ler hazırlamak ve Custom Token gibi middleware işlemlerini yönetmek daha kolay ve anlaşılır bir hal alıyor. Birazda clean code konusunda yardımcı oluyor.
İlk olarak Routes file oluşturmamız gerekecek. Bunun için terminalden aşağıdaki komutu çalıştırmanız gerek.
touch routes/demo.php
routes/demo.php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\TestController;
Route::get('/testing', [TestController::class, 'index']);
Routes file oluşturduk ve içeriğini hazırladık. Gelelim bu file’ın Laravel tarafından kullanılması işlemine. Laravel’de Routes group‘lar RouteServiceProvider.php
dosyası içerisinde tutuluyor. Bizde demo.php
file’ımızı bu Provider içerisinde tanımlayacağız.
app/Providers/RouteServiceProvider.php
public function boot()
{
$this->configureRateLimiting();
$this->routes(function () {
Route::prefix('api')
->middleware('api')
->namespace($this->namespace)
->group(base_path('routes/api.php'));
Route::prefix('demo')
->middleware('api')
->namespace($this->namespace)
->group(base_path('routes/demo.php'));
Route::middleware('web')
->namespace($this->namespace)
->group(base_path('routes/web.php'));
});
}
Artık API özelliklerini kullanan demo isminde bir grubumuz var. Yani demo.php içerisinde tanımladığımız testing route’a ulaşmamız için 127.0.0.1/demo/testing
URL’ini kullanabiliriz.
Peki API özelliklerinide değiştirmek istersek o zaman app/Http/Kernel.php
dosyasına tanımla yapmamız gerekecek.
app/Http/Kernel.php
protected $middlewareGroups = [
'demo' => [
\App\Http\Middleware\ForceJsonResponse::class,
'throttle:api',
\Illuminate\Routing\Middleware\SubstituteBindings::class,
\App\Http\Middleware\DemoMiddleware::class,
],
];
Yukarıdaki tanımla sizin ihtiyaclarınıza göre yapılandırılmalıdır. Demo isimli group’a dahil edilmiş ait her hangi bir URL’e request atıldığında çalışacak middleware’ların listenisi oluşturmanız gerekiyor.
Tabi bu tanımlamanın kullanılabilmesi için RouteServiceProvider.php
dosyasında demo gurubunda middleware methoduna api yerine demo gurubunu kullanmanız gerekecek.
app/Providers/RouteServiceProvider.php
Route::prefix('demo')
->middleware('demo')
->namespace($this->namespace)
->group(base_path('routes/demo.php'));
Şeklinde tanımlama yapabileceğiniz gibi ->middleware(['api', 'demo'])
şeklinde tanımlama yapabildiğinizide unutmayın. Umarım işinize yaramıştır 🙂