# লারাভেলে একাধিক রাউটিং ফাইলের ব্যবহার

> লারাভেলে একাধিক রাউটিং ফাইল ব্যবহার বিধি। (আপডেট: লারাভেল ৫.৫ এ এই ফিচারটি যুক্ত করা হয়েছে।)

Published: 2016-02-16

> আপডেট: লারাভেল ৫.৫-এ এই ফিচারটি যুক্ত করা হয়েছে।

লারাভেলে চমৎকার একটি রাউটিং লাইব্রেরি সহ এসেছে, যা সিম্ফনির রাউটারের উপর ভিত্তি করে তৈরি করা। আর এটি ব্যবহার করাও খুব সহজ। এর চমৎকার এপিআই সেল্ফ এক্সপ্লেনারি। যে কেউ রাউটারের কোড দেখলেই বুঝতে পারবে, এটি কি কাজ করবে। চলুন একটু উদাহরন দেখি-

```php
<?php

Route::get('/', function() {
    return 'Hello World';
});

Route::get('/login', 'AuthController@loginForm');
Route::post('/login', 'AuthController@postLogin');
Route::delete('/logout', 'AuthController@logout');
```

লারাভেলের রাউটগুলি ডিক্লেয়ার করা থাকে `app/Http/routes.php` ফাইলে। সমস্যা হচ্ছে যখন অনেক বড় কোন প্রজেক্টে কাজ করতে হয়, তখন রাউট ফাইলটির আকার অনেক বড় হয়ে যায় এবং একটি মাত্র ফাইলে রাউটগুলি ম্যানেজ করা খুবই কষ্টসাধ্য হয়ে পড়ে। এর সমাধান করা যায় খুব সহজেই, রাউটগুলি অনেকগুলি ফাইলে ভাগ করে নিলে।

এটা করা অত্যন্ত সহজ। এ উদাহরনে আমরা এমন একটি টেস্টকেস চিন্তা করবো, যেখানে এটি ফাইলে প্রজেক্টের ওয়েব রাউটগুলি থাকবে এবং অন্য একটি ফাইলে এপিআই রাউটগুলি থাকবে। এর জন্য আমরা প্রথমেই আমাদের রাউট ফাইলের নাম পরিবর্তন করে রাখি `web_routes.php`. এরপর একটি ডিরেক্টরিতে `api_routes.php` নামে আরো একটা ফাইল তৈরি করি। এরপর আমরা `app/Providers/RouteServiceProvider.php` ফাইলটি ওপেন করি। এই ক্লাসটির প্রথমেই আছে `$namespace` নামে একটি প্রটেক্টেড ভ্যারিয়েবল। এটিকে রিনেম করে `$webNamespace` করি এবং এর ঠিক নিচেই `$apiNamespace` নামে আরো একটি ভ্যারিয়েবল ডিক্লেয়ার করি। এ উদাহরনের জন্য আমরা ধরে নেই আমাদের সবগুলো ওয়েব কন্ট্রোলার এবং এপিআই কন্ট্রোলার থাকবে যথাক্রমে `app/Http/Controllers` ফোল্ডারের `Web` এবং `Api` নামের ফোল্ডারে। তাহলে সেক্ষেত্রে এ কন্ট্রোলারগুলোর নেমস্পেসও এ অনুসারেই হবে। এরপর `map` মেথডে ফাইলদুটোকে রেজিস্টার করে দিতে হবে। সেটি করার পর ফাইলটি দেখতে হবে এরকম-

```php
<?php

namespace App\Providers;

use Illuminate\Routing\Router;
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;

class RouteServiceProvider extends ServiceProvider
{
    protected $webNamespace = 'App\Http\Controllers\Web';
    protected $apiNamespace = 'App\Http\Controllers\Api';

    public function boot(Router $router)
    {
        parent::boot($router);
    }

    public function map(Router $router)
    {
        $router->group(['namespace' => $this->webNamespace], function ($router) {
            require app_path('Http/web_routes.php');
        });

        $router->group(['namespace' => $this->apiNamespace], function ($router) {
            require app_path('Http/api_routes.php');
        });
    }
}
```

এরপর থেকে আপনি আপনার ওয়েবসাইটের রাউটগুলি ওয়েব রাউট ফাইলে এবং এপিআই রাউটগুলি এপিআই রাউট ফাইলে আলাদা করে রাখতে পারবেন। আপনি আপনার প্রয়োজনমত যতগুলি ইচ্ছা ফাইলে রাউটগুলি ভাগ করে রাখতে পারেন। আর রাউট ফাইলের সংখ্যা যদি বেড়ে যায়, তাহলে সেগুলিকে `Http` ফোল্ডারের মধ্যে `Routes` নামে একটি ফোল্ডারে রাখতে পারেন। সেক্ষেত্রে ম্যাপ মেথডে শুধু রাউট ফাইলের পাথটি ঠিক করে দিলেই হবে।
