# এডভান্স রাউটিং

## রাউট প্যারামিটার

আপনি চাইলে রাউটে বিভিন্ন প্যারামিটার পাঠাতে পারেন। মনে করুন আপনি user এর id প্যারামিটার URL থেকে নিতে চাচ্ছেন , সেক্ষেত্রে নিচের মত করে রাউট লিখতে পারেন।

```php
Route::get('user/{id}', function ($id) {
    return 'User '.$id;
});
```

এখানে দেখুন get এর প্রথম আর্গুমেন্ট এ কার্লি ব্যাকেট/দ্বিতীয় বন্ধনী এর ভেতরে id লেখা হয়ে্ছে এবং দ্বিতীয় আর্গুমেন্ট এ ক্লোজারের মধ্যে যে ভ্যারিয়েবল/আর্গুমেন্ট পাস করা হয়েছে তা User এর সাথে যুক্ত করে রিটার্ন করা হয়েছে।

যদি আপনি ক্লোজার ব্যবহার না করে কন্টোলার ব্যবহার করে থাকেন তবে আপনার কন্টোলারের মেথডে নিচের মত করে আর্গুমেন্ট যোগ করুন।

```php
// controller method
public function show($id)
{
  return "User ".$id;
}

// route
Route::get('/user/{id}','SomeController@show');
```

এই জাতীয় রাউট এর ক্ষেত্রে প্যারামিটার ব্যধ্যতামুলক। যদি প্যারামিটার ব্যধ্যতামুলক না করতে চান তাহলে get এর প্রথম আর্গুমেন্ট এ কার্লি ব্যাকেট/দ্বিতীয় বন্ধনী এর ভেতরে id লেখা হয়ে্ছে তার শেষে এটি ? যুক্ত করুন। এবং দ্বিতীয় আর্গুমেন্ট এ ক্লোজারের মধ্যে যে ভ্যারিয়েবল/আর্গুমেন্ট পাস করা হয়েছে তার জন্য ডিফল্ট ভ্যালু ডিফাইন করে দিন।

```php
Route::get('user/{id?}', function ($id=1) {
    return 'User '.$id;
});
```

```php
// controller method
public function show($id=1)
{
  return "User ".$id;
}

// route
Route::get('/user/{id?}','SomeController@show');
```

## রেগুলার এক্সপ্রেশন

আপনি চাইলে রেগুলার এক্সপ্রেশন দিয়ে রাউট লিখতে পারেন। Route ক্লাসের where মেথড ব্যবহার করে প্যারামিটার এর সাথে রেগুলার এক্সপ্রেশন যুক্ত করে দিতে পারেন।

```php
Route::get('user/{name}', function ($name) {
    return $name;
})
->where('name', '[A-Za-z]+');

Route::get('user/{name}/post/{id}', function ($name,$id) {
    return $name."'s post ".$id;
})
->where(['name'=> '[A-Za-z]+','id'=>'[0-9]+']);
```
