ম্যাজেন্টো 2: কন্ট্রোলার অ্যাকশন থেকে "দেখুন" এ ভেরিয়েবলগুলি পাস করা হচ্ছে


12

ম্যাজেন্টো 1-এ, আপনি যদি নিজের কন্ট্রোলার অ্যাকশন থেকে "ভিউ" (যেমন আপনার বিন্যাসের একটি ব্লক, আপনি করতে পারেন) তে ডেটা পাঠাতে চান

  1. এর মাধ্যমে গ্লোবাল রেজিস্ট্রিতে একটি মান / অবজেক্ট যুক্ত করুন Mage::register

  2. সরাসরি একটি ব্লক অবজেক্ট আনুন এবং চলার পরে ফেচড ব্লক অবজেক্টে ডেটা বৈশিষ্ট্য সেট করুন loadLayout

  3. phtmlফাইলগুলিতে ব্লক অবজেক্টগুলিতে কল করার পদ্ধতিগুলি কল করুন এবং ব্লক অবজেক্টগুলি নিয়ামক ক্রিয়ায় পূর্বে সংরক্ষিত ডেটা পড়তে মডেল / ডাটাবেস স্তরটি ব্যবহার করুন

ডাটাবেস থেকে পড়ার জন্য ব্লক অবজেক্ট পদ্ধতি ব্যবহার করা এখনও ম্যাজেন্টো 2 তে কাজ করে বলে মনে হচ্ছে - যা নির্দিষ্ট ধরণের ক্রিয়াকলাপের জন্য উপযুক্ত। যাহোক,

  1. Magento 2 এ আর কোনও বৈশ্বিক রেজিস্ট্রি নেই (বা আছে?)

  2. লেআউট সিস্টেমটি এখন কোনও কারখানার মাধ্যমে একটি পৃষ্ঠা অবজেক্ট তৈরি করে কাজ করে এবং আপনি Magento 1 এ ব্লক রেফারেন্সগুলি একইভাবে দখল করতে পারবেন না 1

নিয়ামক পদক্ষেপ থেকে সরাসরি কোনও দৃশ্যে ডেটা পাঠানো কি ম্যাজেন্টো 2 এ সম্ভব? বা এটি কি ম্যাগান্তোর সাহসী নতুন ডিজাইনের প্যাটার্ন-বিশ্বের পক্ষে কোনও আদর্শ? এটি যদি কোনও নিদর্শনকে সরাসরি নির্দেশ দেয় তবে আমরা কোনও টেম্পলেটে কিছু গণনা করা তথ্য প্রদর্শন করতে চাইলে কী করা উচিত, তবে সেই তথ্যটি একটি রাষ্ট্রীয় সিস্টেমে সংরক্ষণ করতে চাই না (যেমন আমরা এটিতে সংরক্ষণ করতে চাই না) তথ্যশালা)

আমি এই একসঙ্গে নিজেকে হ্যাক করুন কয়েক বিভিন্ন উপায় মনে করতে পারেন - কিন্তু আমি কিভাবে Magento 2 আগ্রহী চায় আপনি এটা করতে হয়।

দ্রষ্টব্য : আমি বুঝতে পারি যে এটির মতো কোনও কিছু ব্যবহার করে একটি নিয়ামক ক্রিয়াকলাপে একটি ব্লক উদাহরণ পাওয়া সম্ভব

$resultPage = $this->resultPageFactory->create();    
$block = $resultPage->getLayout()->getBlock('catalog.wysiwyg.js');        

var_dump(spl_object_hash($block));

ম্যাজেন্টো 2 কোর কোডটি প্রায়শই এটি করে। তবে - কন্ট্রোলার অবজেক্টে আটকানো ব্লক অবজেক্টটি যে কোনও একটি phtmlটেমপ্লেটে পাওয়া যায় না তার চেয়ে পৃথক বস্তু বলে মনে হয় $thisবা $block(প্রাক্তন ( $this) এমন বস্তু হিসাবে প্রতীয়মান হয় যা আসলে টেমপ্লেটটি রেন্ডার করে, যেখানে পরে ( $block) বলে মনে হয় ম্যাজেন্টো ব্লক প্রকারের উদাহরণ)।

#File: path/to/template.phtml
var_dump(spl_object_hash($block));
var_dump(spl_object_hash($this));

আমি বলছি "উপস্থিত হতে" কারণ আমি যদি নিয়ামক পদক্ষেপের পদ্ধতিতে ডেটা সেট করি তবে এটি phtmlটেমপ্লেটে পাওয়া যায় না - এবং যদি আমি spl_object_hashউপরের ফলাফলগুলির সাথে তুলনা করি তবে আমি তিনটি পৃথক হ্যাশ পেয়েছি। তবে আমি এই সমস্ত কিছুর জন্য যথেষ্ট নতুন যে উপরেরটি আমার করা অন্য কোনও ত্রুটি হতে পারে - সুতরাং আপনি যদি ব্লকগুলিতে ডেটা সেট করতে এবং এটি কোনও টেমপ্লেটে আনতে সক্ষম হন তবে আমি এটি সম্পর্কে শুনতে পছন্দ করব !

উত্তর:


17

# 1 সম্পর্কিত, রেজিস্ট্রিটি এখনও বিদ্যমান রয়েছে, আপনি যা ম্যাজেন্টো 1 থেকে জানেন তার সাথে খুব মিল It's এটি সবেমাত্র স্থানান্তরিত। দেখা:\Magento\Framework\Registry

নির্ভরতা ইনজেকশনের মাধ্যমে এটিকে আপনার নির্মাণকারীর সাথে যুক্ত করুন এবং তারপরে আপনি ডেটা সঞ্চয় / অ্যাক্সেসের জন্য আপনার পরিচিত $registry->register($key, $value)এবং $registry->registry($key)পদ্ধতিগুলি ব্যবহার করতে পারেন ।

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

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


2
কৌশলটি অবশ্যই জেনে যাচ্ছে মূলটির জন্য কোন অংশটি দেখার দরকার এবং কোনটি উপেক্ষা করা উচিত :) দরকারী তথ্যের জন্য পয়েন্টারগুলির জন্য ধন্যবাদ, +1!
অ্যালান ঝড় 0

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

@ অ্যান্টনক্রিল কীভাবে পৃষ্ঠা রেন্ডারার হেল্পারদের সম্পর্কে? সিএমএস পৃষ্ঠা সহায়ক, পণ্য দর্শন সহায়ক, এইগুলি কি এইচটিটিপি অনুরোধ থেকে আলাদা রেন্ডারিং বোঝাতে চাইছে?
ইভান চেপুর্নি

5

কন্ট্রোলার অ্যাকশন থেকে দেখার জন্য আপনার ভেরিয়েবলগুলি পাস করা উচিত নয় । ভেরিয়েবলগুলি দেখতে (টেমপ্লেট ইঞ্জিন) পাস করার জন্য ব্লক ব্যবহার করুন।


কেন? ব্লক থেকে দেখার জন্য কীভাবে আপনি প্যাকেজগুলি পেতে / পোস্ট করতে পারেন? বেশিরভাগ যুক্তি তাদের দেখার জন্য নিয়ন্ত্রণকারী থেকে পাস করে না?
লুস্ক্কু

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

কন্ট্রোলার থেকে ব্লক করার অনুরোধের প্যারামগুলি পাস করার জন্য আমি $ block-> असाइन () ব্যবহার করি। এটাও কি খারাপ অভ্যাস?
লুস্ক্কু

ক্রিয়াকলাপ থেকে ব্লকগুলির সরাসরি সম্বোধনকেও নিরুৎসাহিত করা হয় কারণ আপনি কখনই নিশ্চিত হন না যে কোনও পৃষ্ঠায় ব্লক উপস্থিত রয়েছে কিনা।
কান্দি

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