মেনু বিল্ডিং প্যাটার্ন


9

মেনুটি রাউটিংয়ের জন্য ব্যবহার না করা অবস্থায় একটি মেনু সক্রিয় রাষ্ট্র পরিচালনার আশেপাশে আমার মাথা পেতে সমস্যা হচ্ছে।

আমি ড্রুপাল থেকে এসেছি যেখানে মেনু সিস্টেমটি পাশাপাশি রাউটিং পরিচালনা করে। সুতরাং সক্রিয় রাষ্ট্র এবং সক্রিয়-ট্রেইল স্থিতির অবস্থানটি রুট দ্বারা পরিচালনা করা হয় (এটি মেনু রেন্ডারিং সিস্টেম হিসাবেও কাজ করে)।

এখন, অনেকগুলি পিএইচপি ফ্রেমওয়ার্কগুলিতে রাউটার ক্লাস রয়েছে যা রাউটিং পরিচালনা করে। এটি মেনু পোষ্ট সম্পর্কে সচেতন হওয়া উচিত নয় বলে এটি ভাল বিচ্ছেদ বলে মনে হচ্ছে বিকল্প || ... অনুরোধ.

কিন্তু ফ্রন্টএন্ড লেখার সময় আমি নিজেকে মেনুতে হার্ড কোডিং করে দেখতে পেলাম। বা ডিবিতে সমস্ত কিছু সংরক্ষণ এবং সেই মানগুলিকে একটি দৃষ্টিতে প্রেরণ করা। আমি এই পদ্ধতির পছন্দ করি না তা হ'ল আপনি নিজের রাউটারে ইতিমধ্যে যা লিখেছেন তার একটি অনুলিপি তৈরি করার পদ্ধতি আপনি এখন মেনু ক্লাসটি ব্যবহার করছেন।

একটি উদাহরণ:

Route::get('/somewhere','routename.somewhere','showStuffController');
Route::post('/somewhere','routename.somewhere','saveStuffController');

Menu::add('label.somewhere','routename.somewhere');

আপনি উদ্বেগগুলি এখানে আলাদা করছেন, তাই দুর্দান্ত। তবে মেনু তার সক্রিয় স্থিতি স্থাপনের জন্য রুটে খুব বেশি নির্ভর করে। অ্যাক্টিভ-ট্রেইল সেট করতে মেনুতে ক্রিয়াকলাপ সম্পর্কেও জানতে হবে।

তাই হ্যাঁ, সক্রিয় ট্রেইল এবং সক্রিয় স্থিতির শ্রেণি নির্ধারণ করা আসলে দেখার একটি বিষয়। কিন্তু হচ্ছে

if ( Route::currentName() === $menuitem->getRouteName() ) { print 'active'; }

আপনার সমস্ত মতামত বোকা মনে হয়। তারপরে সেই সমস্ত বিরক্তিকর সক্রিয়-ট্রেইল যুক্ত করুন যদি এটি হয় এবং এটি একটি বাস্তব ব্লাট। দৃশ্যটি রেন্ডার হওয়ার আগে এবং একটি সক্রিয় ট্রেল পতাকাটি সত্যে সেট করার আগে হ্যান্ডেল করা এটি আমার জানার মতোই কুৎসিত মনে হয় (সমস্ত বাচ্চার উপরে লুপ করে থাকা সমস্ত বাচ্চার উপরে একটি অগ্রণীত লুপিং ...)

আমার প্রশ্নটি হ'ল:

এই ক্লিনারটি পাওয়ার জন্য কোনও প্যাটার্ন বা স্মার্ট উপায় আছে কি, আরও ভাল, ...? কীভাবে একজনকে সক্রিয়-ট্রেইল 'সমস্যা' পরিচালনা করতে হবে?

আমি শিশু -> পিতামাতার রেন্ডারিংয়ের কথা ভাবছিলাম। সুতরাং বিজ্ঞাপনটি গভীরতম স্তরের সাথে শুরু করুন এবং তারপরে আমার পথে কাজ করুন। তবে তারপরে বাচ্চা তার পিতামাতার সম্পর্কে জানে তবে বাবা-মা তার সন্তানদের সম্পর্কে কিছুই জানেন না (অদ্ভুত বলে মনে হয়)।

উত্তর:


1

যখন মেনুটি রাউটিংয়ের জন্য ব্যবহৃত হয় না

আমি বলব যে রাউটিংটি মেনুটির জন্য ব্যবহার করা যেতে পারে।


আপনি ইতিমধ্যে উল্লেখ করেছেন যে, রাউটারটি হুক করার জন্য দুর্দান্ত জায়গা হবে I আমি মনে করি না যে প্রতিটি অনুরোধে বর্তমান পৃষ্ঠার জন্য মেনু মেটা মূল্যায়ন করে এমন একটি হুক ব্যবহার করা কুশ্রী হবে।

যদি আপনি সক্রিয় রাষ্ট্রটি ট্র্যাক করার জন্য আপনার দৃষ্টিভঙ্গিকে দায়বদ্ধ করেন তবে আপনি উদ্বেগ আলাদা করবেন না। মতামতগুলি তাদের জন্য যা করা হয় তা করা উচিত - তবে এটি তাদের মেনু স্থিতিটি পরিচালনা করারও দরকার নেই। মেনু মেটা ডেটা সাধারণত প্রস্থে একই রকম হয় এবং নিজেকে খুঁজে পেতে এবং মেনুটি রেন্ডার করতে আপনাকে কেবল রুটটি প্রয়োজন।

আপনার রাউটারের উপর নির্ভর করে আপনার একটি সাধারণ ফাংশন বা শ্রেণীর প্রয়োজন যা কিছু স্থির মেনু মেটা ডেটা নেয় এবং বর্তমান রুট আপনার পরবর্তী সমস্ত তথ্য সরবরাহ করার জন্য যথেষ্ট হবে।

মেনু মেটা নিজেই অবশ্যই কোনও বস্তু হওয়া উচিত নয়। বেশিরভাগ ক্ষেত্রে পদ্ধতি ছাড়াই একটি সাধারণ কী মান ডেটা কাঠামো যথেষ্ট be

হুক আপনার মেনু সম্পর্কিত কিছু সাধারণ কার্যকারিতা যেমন ব্রেডক্রামস, গভীরতা, প্যারেন্ট পৃষ্ঠা বা বর্তমান পৃষ্ঠার সাথে একটি স্টেট অবজেক্ট তৈরি করতে পারে এবং এই পোস্টটিকে আপনার http অনুরোধের প্রসঙ্গে সনাক্ত করতে পারে। হুকের ভিতরে আপনার বিভিন্ন সম্ভাবনা রয়েছে - তবে সাধারণত এটি প্রয়োজনীয় তথ্য সংগ্রহ করা, প্রস্তুত করা এবং এমন কোনও কিছুর সাথে সম্পর্কিত যা এটি কীভাবে মোকাবেলা করতে জানে।

এই পদ্ধতির আপনার প্রয়োজনগুলির সাথে স্কেল করে এবং এর কয়েকটি সুবিধা রয়েছে:

  1. আপনার ডাটাবেসের ডেটা নিয়ে কাজ করার দরকার নেই, যা আপনি কম খরচে রানটাইমে সরবরাহ করতে পারেন
  2. আপনার মেনু (মেটা) এক জায়গায় পাবেন যা এটি রক্ষণাবেক্ষণযোগ্য করে তোলে
  3. আপনি যদি চান যে আপনার রুটে আপনার মেনুটি সম্পূর্ণরূপে 1: 1 উপর নির্ভর করে তবে এটি গতিশীল মেনু মেটা সরবরাহ করে অর্জন করা যেতে পারে
  4. যদি আপনার বিষয়বস্তু বৃদ্ধি পায় (এবং সেইজন্য মেনু) তবে আপনি এই ডেটাটি সেশনে স্থানান্তর করতে পারেন যা একটি দ্রুত মূল্যের মান স্টোরে লেখা যেতে পারে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.