Nested Routes এবং Sub-routes ব্যবস্থাপনা

Advanced Routing এবং URL ম্যানেজমেন্ট - জেন্ড ফ্রেমওয়ার্ক (Zend Framework) - Web Development

290

Zend Framework (বর্তমানে Laminas) এ রাউটিং হল একটি গুরুত্বপূর্ণ অংশ যা URL থেকে ইনকামিং রিকোয়েস্টগুলোকে অ্যাপ্লিকেশনের নির্দিষ্ট কন্ট্রোলার এবং অ্যাকশনে পরিচালনা করে। যখন আপনার অ্যাপ্লিকেশন জটিল হয় এবং URL গুলি বিভিন্ন স্তরে বিভক্ত হয়, তখন Nested Routes এবং Sub-routes ব্যবস্থাপনা গুরুত্বপূর্ণ হয়ে ওঠে। এর মাধ্যমে আপনি URL হায়ারার্কি (যেমন example.com/admin/users অথবা example.com/products/electronics) তৈরি করতে পারবেন এবং রাউটিংকে আরও সহজে ম্যানেজ করতে পারবেন।

Zend Framework এ Nested Routes বা Sub-routes ব্যবস্থাপনা কনফিগার করা বেশ সহজ। এই কনফিগারেশন আপনাকে URL গুলি গোষ্ঠীভুক্ত (grouped) করে বিভিন্ন রাউটগুলির জন্য আলাদা কন্ট্রোলার এবং অ্যাকশন নির্ধারণ করতে সহায়ক হয়।


Nested Routes এবং Sub-routes কনফিগারেশন

Zend Framework এ Nested Routes কনফিগার করতে আপনাকে সাধারণত module.config.php ফাইলের মধ্যে router সেকশনে কনফিগারেশন করতে হয়। Nested Routes মূলত parent এবং child রাউটের মধ্যে সম্পর্ক তৈরি করে। এখানে parent route একাধিক sub-routes কে অন্তর্ভুক্ত করে এবং এর মাধ্যমে URL গুলোর স্তর বা হায়ারার্কি তৈরি হয়।


১. Simple Nested Routes উদাহরণ

ধরা যাক, আপনার অ্যাপ্লিকেশনটি দুটি প্রধান সেকশন (যেমন admin এবং user) নিয়ে গঠিত। আপনাকে এই দুইটি সেকশনের জন্য নেস্টেড রাউট তৈরি করতে হবে।

module.config.php ফাইলে কনফিগারেশন:

return [
    'router' => [
        'routes' => [
            // Parent route for 'admin'
            'admin' => [
                'type'    => 'Literal',
                'options' => [
                    'route'    => '/admin',
                    'defaults' => [
                        'controller' => 'Admin\Controller\Dashboard',
                        'action'     => 'index',
                    ],
                ],
                'may_terminate' => false,
                'child_routes' => [
                    // Sub-route for 'admin/users'
                    'users' => [
                        'type'    => 'Literal',
                        'options' => [
                            'route'    => '/users',
                            'defaults' => [
                                'controller' => 'Admin\Controller\Users',
                                'action'     => 'index',
                            ],
                        ],
                    ],
                    // Sub-route for 'admin/settings'
                    'settings' => [
                        'type'    => 'Literal',
                        'options' => [
                            'route'    => '/settings',
                            'defaults' => [
                                'controller' => 'Admin\Controller\Settings',
                                'action'     => 'index',
                            ],
                        ],
                    ],
                ],
            ],
            // Parent route for 'user'
            'user' => [
                'type'    => 'Literal',
                'options' => [
                    'route'    => '/user',
                    'defaults' => [
                        'controller' => 'User\Controller\Dashboard',
                        'action'     => 'index',
                    ],
                ],
                'may_terminate' => false,
                'child_routes' => [
                    // Sub-route for 'user/profile'
                    'profile' => [
                        'type'    => 'Literal',
                        'options' => [
                            'route'    => '/profile',
                            'defaults' => [
                                'controller' => 'User\Controller\Profile',
                                'action'     => 'index',
                            ],
                        ],
                    ],
                    // Sub-route for 'user/settings'
                    'settings' => [
                        'type'    => 'Literal',
                        'options' => [
                            'route'    => '/settings',
                            'defaults' => [
                                'controller' => 'User\Controller\Settings',
                                'action'     => 'index',
                            ],
                        ],
                    ],
                ],
            ],
        ],
    ],
];

এখানে:

  • admin এবং user রুট দুটি প্যারেন্ট রুট, যার অধীনে বিভিন্ন সাব-রুট যেমন users, settings, profile ইত্যাদি কনফিগার করা হয়েছে।
  • May terminate অপশনটি false সেট করা হয়েছে, যার মানে হলো প্যারেন্ট রুটের পরে সাব-রুট কনফিগার করা হবে।

২. Dynamic Nested Routes

Zend Framework এ Dynamic Nested Routes ব্যবহার করতে চাইলে, আপনি কিছু রাউট প্যারামিটার ব্যবহার করতে পারেন যা চলতি URL অনুসারে পরিবর্তিত হবে। উদাহরণস্বরূপ, যদি আপনাকে ব্যবহারকারীর আইডি দিয়ে রুট তৈরি করতে হয়, তবে আপনি রাউটের মধ্যে প্যারামিটার ব্যবহার করতে পারেন।

Dynamic Nested Routes কনফিগারেশন:

return [
    'router' => [
        'routes' => [
            'admin' => [
                'type'    => 'Literal',
                'options' => [
                    'route'    => '/admin',
                    'defaults' => [
                        'controller' => 'Admin\Controller\Dashboard',
                        'action'     => 'index',
                    ],
                ],
                'may_terminate' => false,
                'child_routes' => [
                    'users' => [
                        'type'    => 'Segment',
                        'options' => [
                            'route'    => '/users[/:id]',
                            'defaults' => [
                                'controller' => 'Admin\Controller\Users',
                                'action'     => 'view',
                            ],
                        ],
                    ],
                ],
            ],
        ],
    ],
];

এখানে:

  • /admin/users/:id রাউটটি একটি dynamic রাউট, যেখানে :id প্যারামিটারটি একটি ব্যবহারকারীর আইডি ধারণ করবে।
  • এই প্যারামিটারটি অ্যাকশনে পৌঁছানোর পরে ব্যবহার করা যাবে।

৩. Route Prefix ব্যবহার করে Nested Routes

কখনও কখনও আপনার প্রয়োজন হতে পারে একটি নির্দিষ্ট প্রিফিক্স দিয়ে রাউট তৈরি করতে, যেমন /admin বা /user। এই পরিস্থিতিতে, আপনি Route Prefix ব্যবহার করতে পারেন, যা অ্যাপ্লিকেশনের URL গুলির শুরুতে একটি নির্দিষ্ট অংশ যোগ করবে।

Route Prefix কনফিগারেশন:

return [
    'router' => [
        'routes' => [
            'admin' => [
                'type'    => 'Segment',
                'options' => [
                    'route'    => '/admin[/:controller[/:action]]',
                    'defaults' => [
                        'controller' => 'Admin\Controller\Dashboard',
                        'action'     => 'index',
                    ],
                ],
            ],
        ],
    ],
];

এখানে /admin প্রিফিক্সের সাথে সব রাউটগুলিকে কভার করা হয়েছে এবং :controller:action প্যারামিটারগুলি ডাইনামিকভাবে ইউজ করা যাবে।


৪. Sub-Routes এর ব্যবহার

Zend Framework এ Sub-routes হল মূল রুটের অধীনে আরও বিস্তারিত রাউটগুলো। যেমন:

Sub-routes কনফিগারেশন:

return [
    'router' => [
        'routes' => [
            'product' => [
                'type'    => 'Literal',
                'options' => [
                    'route'    => '/product',
                    'defaults' => [
                        'controller' => 'Product\Controller\Index',
                        'action'     => 'index',
                    ],
                ],
                'may_terminate' => false,
                'child_routes' => [
                    'detail' => [
                        'type'    => 'Segment',
                        'options' => [
                            'route'    => '/:id',
                            'defaults' => [
                                'controller' => 'Product\Controller\Detail',
                                'action'     => 'view',
                            ],
                        ],
                    ],
                ],
            ],
        ],
    ],
];

এখানে:

  • product প্যারেন্ট রুট, এবং তার অধীনে detail সাব-রুট রয়েছে, যেখানে :id একটি ডাইনামিক প্যারামিটার।

সারাংশ

Zend Framework এ Nested Routes এবং Sub-routes ব্যবস্থাপনা ব্যবহার করে URL গুলির সঠিক হায়ারার্কি তৈরি করা যায়। এই ফিচারের মাধ্যমে আপনি প্যারেন্ট রাউটের অধীনে একাধিক সাব-রুট কনফিগার করতে পারেন এবং URL গুলিকে আরও সংগঠিতভাবে পরিচালনা করতে পারেন। আপনি চাইলে ডাইনামিক প্যারামিটারও ব্যবহার করতে পারেন যেমন :id, :controller ইত্যাদি, যা আপনাকে আরও নমনীয় রাউট কনফিগারেশনের সুযোগ দেয়।

Content added By
Promotion

Are you sure to start over?

Loading...