আন্ডারস্কোরগুলিতে কেন রাউটিং ফাইলগুলি পূর্ণ?


24

একটি পূর্বনির্ধারিত আন্ডারস্কোর চরিত্রের সাথে এবং ছাড়া সমস্ত পরামিতিগুলির সাথে কী চুক্তি হয় ?

এই পরামিতিগুলি কীভাবে প্রক্রিয়াকরণ করা যায় সেখানে দ্রুপাল কোথায় সিদ্ধান্ত নেবে?

এই ধারণাটি সিমফোনির কাছ থেকে প্রবর্তিত হয়েছিল, না এটি দ্রুপলের কাছে নতুন?

উদাহরণ ( node.routing.yml ):

node.overview_types:
  path: '/admin/structure/types'
  defaults:
    _controller: '\Drupal\Core\Entity\Controller\EntityListController::listing'
    entity_type: 'node_type'
    _title: 'Content types'
  requirements:
    _permission: 'administer content types'

2
এটি সিমফনি কনভেনশন । এখানে একটি ভাল নিবন্ধ আছে , বিটটি সন্ধান করুন যা জানায় চূড়ান্ত বিষয়টি প্যারামিটারের নামগুলিতে আন্ডারস্কোর চরিত্রের বিশেষ অর্থ। এই চরিত্রটি দিয়ে শুরু হওয়া প্যারামিটারগুলির বিশেষ অর্থ রয়েছে
ক্লাইভ

1
ধন্যবাদ ক্লাইভ এই নিবন্ধটিতে "বিশেষ অর্থ" উল্লেখ করা হয়েছে, তবে এটি মোটেই ব্যাখ্যা করে না। কেন নন-আন্ডারস্কোর পরামিতিগুলি বিশেষ হতে পারে?
ড্যানিয়েল

1
হ্যাঁ, কেন নন-আন্ডারস্কোর প্যারামিটারগুলি বিশেষ বিশেষ? , এটি একটি গভীর অস্তিত্বের প্রশ্নের মতো মনে হচ্ছে! সাধারণত (কেবলমাত্র) প্রিফিক্সিং ভেরিয়েবলগুলি হয় হয় 'প্রাইভেট' বর্ণ (এখানে অসম্ভব) নির্দেশ করতে বা সিস্টেমের অন্যান্য শ্রেণি / পদ্ধতি / কোনও কিছুর সাথে সংঘর্ষের নাম এড়াতে সহায়তা করার জন্য করা হয়। সরকারী দস্তাবেজগুলি দেখতে ভাল হবে, হ্যাঁ
ক্লাইভ

উত্তর:


41

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

সাধারণ ওভারভিউ

সিমফোনি উপাদানগুলির এখানে দুটি গুরুত্বপূর্ণ ধারণা রয়েছে। HTTP কার্নেলটি এমন একটি সিস্টেম যা অনুরোধটি পেয়ে থাকে, অন্যভাবে অন্য সিস্টেমগুলিকে কোডের টুকরোটি সংজ্ঞায়িত করতে অনুরোধ করে যা অনুরোধ করা আউটপুট (একটি প্রতিক্রিয়া অবজেক্ট) উত্পাদন করে এবং ক্লায়েন্টকে প্রতিক্রিয়াটি ফেরত পাঠায়। এই কোডের টুকরোটিকে নিয়ামক বলা হয়, সুতরাং এটি ফাংশনের মতো খাঁটি php4 হতে পারে, কোনও বস্তুর কোনও পদ্ধতি বা এমনকি কোনও বেনামি ফাংশনও হতে পারে।

যে সিস্টেমটি জানে যে কোনও নিয়ন্ত্রণকারী বর্তমান অনুরোধের জন্য দায়ী তা হ'ল রাউটিং সিস্টেম।

এখানে চিত্র বর্ণনা লিখুন

বেসিক রাউটিং ফাইল

মডিউল বিকাশকারী হিসাবে আপনি রুটের তালিকা এবং সংশ্লিষ্ট নিয়ন্ত্রকদের সংজ্ঞা দিন।

এখানে একটি জসন প্রতিক্রিয়ার উদাহরণ রয়েছে:

taxonomy.autocomplete_vid:
  path: '/taxonomy/autocomplete_vid/{taxonomy_vocabulary}'
  defaults:
    _controller: '\Drupal\taxonomy\Controller\TermAutocompleteController::autocompletePerVid'
  requirements:
    taxonomy_vocabulary: \d+

বেশিরভাগ সিমফনি ডকুমেন্টেশন প্যাটার্ন উল্লেখ করে তবে ড্রুপাল কেবল তার রাউটিং ফাইলটিতে অবহিত "পাথ" কীটিকে অনুমতি দেওয়ার সিদ্ধান্ত নিয়েছে।

মূল ধারণাটি হ'ল নিয়ন্ত্রক যা সিস্টেম থেকে কিছু পরামিতি পায় এবং তাদের প্রতিক্রিয়াতে রূপান্তর করে। এই উদাহরণে আপনার 'ট্যাক্সোনমি_ভোকাবুলারি' প্যারামিটার রয়েছে। সুতরাং আন্ডারস্কোর ব্যতীত সমস্ত কিছুই নিয়ন্ত্রণকারীর প্যারামিটার হিসাবে বিবেচিত হয়। আপনি যদি কোনও ডিফল্ট মান নির্দিষ্ট করতে চান তবে আপনি এটি ডিফল্ট অ্যারেতে রেখে দিন। একই yML অ্যারে আপনি '::' এর সাথে সংযুক্ত শ্রেণি এবং পদ্ধতি নির্দিষ্ট করে থাকেন যেখানে সিস্টেমটি স্টাফ সন্ধান করতে হবে তা জানান। কন্ট্রোলার পরামিতিগুলির সাথে অন্য সমস্ত সম্পত্তিগুলির কোনও সম্পর্ক নেই এবং তাই এটি অভ্যন্তরীণ হিসাবে বিবেচিত হয় এবং তাই উপসর্গ হিসাবে একটি আন্ডারস্কোর থাকে।

সিমফনি নিজেই আপনাকে আগত প্যারামিটারটি বৈধ ('প্রয়োজনীয়তা' ব্যবহার করে) যাচাই করার জন্য নিয়মিত এক্সপ্রেশনগুলি সংজ্ঞায়িত করতে দেয়। এখানে এটি কেবল সংখ্যার সাথে মিলবে।

নিয়ামক সমাধানকারী

একবার সিম্ফনি জানতে পারলে বর্তমানের অনুরোধে কোন নিয়ামক সক্রিয় রয়েছে, এটি তথাকথিত নিয়ামককে সমাধানকারীকে নিয়ন্ত্রণকারীর একটি উদাহরণ তৈরি করতে বলে, যা কল_উজার_ফুনক_আরয়ের মাধ্যমে কার্যকর করা যেতে পারে। নিয়ামককে সমাধানযোগ্য (অবজেক্ট + পদ্ধতি, বেনাম ফাংশন) এবং নিয়ামকের কাছে পরামিতিগুলি পাস করার জন্য একটি পদ্ধতি পাওয়ার জন্য নিয়ামক সমাধানের একটি পদ্ধতি রয়েছে, কন্ট্রোলার রিসলভার দেখুন

ড্রুপাল এক্সটেনশন

এটি মূলত সিম্ফনি আপনাকে দেয়।

ড্রুপাল যদিও কিছুটা জটিল:

  • আপনি রুটে অ্যাক্সেস পরীক্ষা করতে পারেন। উদাহরণস্বরূপ ইউজার_একসেস () কল করা দ্রুপাল 7 এবং নীচে খুব সাধারণ ছিল।
  • আপনি ট্যাক্সনমি_ভোকাবুলারিটিকে এর আসল সত্তার আইটেমে রূপান্তর করতে চান না
  • আপনি পুরো পৃষ্ঠার প্রতিক্রিয়া উত্পন্ন করতে চান না, তবে কেবল "মূল সামগ্রী"।

অ্যাক্সেস চেক

দ্রুপাল সিমফোনির অংশগুলির শীর্ষে একটি সিস্টেম চালু করেছে যা ব্যবহারকারীদের বর্তমান রুটে অ্যাক্সেস রয়েছে কিনা এবং বিকল্পটি 403 (অ্যাক্সেস প্রত্যাখ্যান) ব্যতিক্রম রয়েছে কিনা তা পরীক্ষা করে। অ্যাক্সেস ম্যানেজার

রাউটিং ফাইলে আপনি এটি প্রয়োজনীয়তার অংশে উল্লেখ করেছেন। সর্বাধিক সাধারণ বিটগুলি উদাহরণে তালিকাভুক্ত করা হয়েছে:

  path: '/user/{user}'
  options:
    _access_mode: 'ANY'
  requirements:
    _permission: 'access user profiles'
    _entity_access: 'user.view'
    _role: 'administrator'

_প্রিমেশন ব্যবহারকারী_একসেস () -কে একটি কলকে সংজ্ঞায়িত করে, _ রোল নিশ্চিত করে যে ব্যবহারকারীর একটি নির্দিষ্ট ভূমিকা রয়েছে (আপনি ওআর এবং + এর জন্য এবং লজিকের মাধ্যমে একাধিকগুলি নির্দিষ্ট করতে পারেন)। _entity_access আপনাকে সত্তা সিস্টেমটি জিজ্ঞাসা করে যে আপনার ব্যবহারকারীর সত্ত্বা দেখার অ্যাক্সেস রয়েছে কিনা। প্রতি ডিফল্ট ড্রুপাল নিশ্চিত করে যে আপনি অ্যাক্সেস চেকার যুক্ত করেছেন এটি আপনাকে এগিয়ে যাওয়ার অনুমতি দেয় তবে আপনি এটি _access_mode এর মাধ্যমে বিকল্পগুলিতে স্যুইচ করতে পারেন।

Upcasting

তালিকায় উল্লিখিত হিসাবে আপনি কোনও সত্তা লোড করার বিষয়ে যত্ন নিতে চান না, উদাহরণ হিসাবে / ব্যবহারকারী /} ব্যবহারকারী। দেখুন। সত্তার জন্য আপনি মূলত সত্তার প্রকারের নামটি ব্যবহার করেন এবং এটি URL এ পাস করা আইডি সহ একটি সত্তা_লোড কার্যকর করবে _ প্যারাম রূপান্তরকারী পরিচালক

পৃষ্ঠার প্রতিক্রিয়া

যেমনটি আগে নিয়ন্ত্রক প্রতিক্রিয়া অবজেক্ট উত্পন্ন করতে দায়বদ্ধ। এটি দ্রুপালে ভয়াবহ হবে কারণ একটি পৃষ্ঠাতে এর অঞ্চলগুলিতে উপস্থিত সমস্ত ব্লক, এইচটিএমএল এবং পৃষ্ঠা টেম্পলেট ইত্যাদির মতো আরও অনেকগুলি সমন্বিত থাকে Therefore সুতরাং দ্রুপাল একটি নিয়ামক নির্দিষ্ট করার জন্য একটি আলাদা কী নির্দিষ্ট করে যা কোনও পৃষ্ঠার সামগ্রীকে ফেরত দেয়:

user.page:
  path: '/user'
  defaults:
    _content: '\Drupal\user\Controller\UserController::userPage'
  requirements:
    _access: 'TRUE'

স্ট্রিংটি সংজ্ঞায়িত করা হ'ল আপনার পৃষ্ঠার মূল বিষয়বস্তু অঞ্চলে রেন্ডার অ্যারে তৈরি করতে ব্যবহৃত নিয়ামক।

আরেকটি সংযোজন হ'ল ফর্মগুলি কীভাবে মোকাবেলা করা যায় সেহেতু, কোনও ফর্মের সাথে কোনও পৃষ্ঠা ফিরিয়ে দেওয়া কেবলমাত্র রেন্ডার অ্যারের চেয়ে কিছুটা জটিল, সুতরাং আপনি বর্তমান ফর্মের জন্য দায়ী ফর্মআইন্টারফেসের সাথে _ফর্মটি সংজ্ঞায়িত করতে পারেন।

user.pass:
  path: '/user/password'
  defaults:
    _form: '\Drupal\user\Form\UserPasswordForm'
  requirements:
    _access: 'TRUE'

দ্রষ্টব্য: এটি আমার দৃষ্টিকোণ থেকে সর্বাধিক গুরুত্বপূর্ণ বিষয়গুলি কভার করে, যদিও আরও অনেকগুলি পয়েন্ট সম্পর্কে কথা বলার জন্য অবশ্যই এটি রয়েছে।

টি এল; ডিআর

  • অ্যান্ডস্কোরগুলি প্রতিটি কিছুর জন্য নির্দিষ্ট করা হয় যা নিয়ামকের পরামিতি নয়। এটি সিমফনি থেকে এক ধরণের "স্ট্যান্ডার্ড" হিসাবে আসছে।
  • এই প্যারামিটারগুলি প্যারাম রূপান্তরকারী মাধ্যমে upcasted এবং নিয়ামক সমাধানকারী ব্যবহার করে নিয়ন্ত্রণকারীর কাছে প্রেরণ করা হয়
  • সিম্ফনি রাউটিং সিস্টেমের সাথে মানুষের যোগাযোগের সহজ করে তুলতে দ্রুপালের কিছু সংযোজন রয়েছে।

কি দারুন. চিত্তাকর্ষক উত্তর। কেন নির্দিষ্ট প্যারামিটারগুলির মধ্যে পিরিয়ডগুলি আন্ডারস্কোর ব্যবহারের বিরোধিতা করে? যেমন user.pass(উপরের উদাহরণে) বনাম user_pass। এটি কি একটি সিমফনি সম্মেলনও?
খ্রিস্টলি

2
Some মডিউল $ ব্যবহারের জন্য একরকম কনভেনশন রয়েছে কোনও রুটের মেশিনের নাম হিসাবে। অভ্যন্তরীণভাবে কিছু ধরে নিলেও।
ড্যানিয়েল ওয়েহনার

নীচের ইস্যু অনুসারে, _ কনটেন্টটি আর ব্যবহার করা হয় না, তবে _ নিয়ন্ত্রক। সুতরাং পৃষ্ঠা প্রতিক্রিয়া অংশের উদাহরণটি আপ টু ডেট নয়। drupal.org/node/2378809 আমরা যদি আমাদের পৃষ্ঠার বিষয়বস্তু অঞ্চলে ডেটা প্রদর্শন করতে চাই, তবে কন্ট্রোলার একটি রেন্ডার অ্যারে সংজ্ঞায়িত করবে, এটি ড্রুপাল in-এ কীভাবে করা হয়েছিল তার মতোই If আমরা যদি তা বাইপাস করতে চাই এবং আমাদের পৃষ্ঠাটি তৈরি করতে চাই স্ক্র্যাচ থেকে, তারপরে আমরা কোনও প্রতিক্রিয়া অবজেক্টটি ফিরিয়ে দিতে পারি।
বেনালোরি

নিশ্চিতভাবেই, আপনি আশা করতে পারেন না যে 1.5 বছর ঘটে না
ড্যানিয়েল ওয়েহনার 20
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.