সত্তা_মেডাটাটা_আপনার () দিয়ে আপনি ক্ষেত্রের মানটি কীভাবে সাফ করবেন?


20

মনে করুন এর ক্ষেত্রের সাথে আমার একটি সত্তা রয়েছে field_fooএবং আমি সেই ক্ষেত্রটির মান সাফ করতে চাই।

আমার কী পাস করা উচিত $wrapper->set()?

আমি চেষ্টা করেছি NULLএবং array()এবং উভয়ই একটি ত্রুটি বার্তা প্রকাশ করেছি।


1
আপনি সম্ভবত EntityStructureWrapper::clear()বা EntityValueWrapper::clear()পদ্ধতি খুঁজছেন ?
ক্লাইভ

::clearসরাসরি কল করা খালি মানটিতে ক্ষেত্রটি সেট করার সমতুল্য নয়, কারণ এটি খালি মান দিয়ে কল updateParentকরার পথে কল setহয় না। অন্যান্য জিনিসের মধ্যে, updateParentনিশ্চিত করে যে setter callbackসম্পত্তি সম্পর্কিত তথ্যে সংজ্ঞায়িত ( ড্রুপালকন্ট্রিবিউ.কম / অ্যাপি / ড্রপাল /… দেখুন ) বলা হয়েছে।
অ্যালিস হিটন

উত্তর:


24

সমস্যাটি হ'ল আপনাকে অবশ্যই একটি ফাঁকা মান সেট করতে হবে যা আপনার ক্ষেত্রের ডেটা ধরণের সাথে সামঞ্জস্যপূর্ণ। আপনি যদি তা না করেন তবে আপনি একটি ব্যতিক্রম উত্থাপন পেতে পারেন। পাসিং NULLবা array()স্ট্রিং যখন প্রত্যাশিত হয় তাই ত্রুটি বাড়িয়ে তুলবে।

আরেকটি বিষয় মনে রাখবেন যে, আপনার পাস করা ডেটা আপনার ক্ষেত্রের একক মান, একটি বহু-মান ক্ষেত্র, বা একাধিক বৈশিষ্ট্যযুক্ত ক্ষেত্র কিনা তার উপরও নির্ভর করবে।

যদি আপনার ক্ষেত্রটি একক মান হয় (এবং ক্ষেত্রের জন্য মোড়ক এন্টিভ্যালুওয়্যার্পারের উদাহরণ ) তবে আপনার এটি প্রশ্নে ডেটা টাইপের সাথে সামঞ্জস্য করা একটি খালি মান নির্ধারণ করা উচিত । উদাহরণস্বরূপ নিম্নলিখিত দুটি পদ্ধতি সমান:

$wrapper->title = '';
$wrapper->title->set('');

তবে নিম্নলিখিত তিনটি উদাহরণ একটি ব্যতিক্রম উত্থাপন করবে, কারণ ডেটা টাইপগুলি titleক্ষেত্রের সাথে সামঞ্জস্যপূর্ণ নয় :

$wrapper->title->set();
$wrapper->title->set(NULL);
$wrapper->title->set(array());

যদি আপনার ক্ষেত্রটি একাধিক বৈশিষ্ট্যযুক্ত ক্ষেত্র হয় (উদাহরণস্বরূপ একটি বিন্যাসযোগ্য পাঠ্য ক্ষেত্র, যা একটি valueএবং formatসম্পত্তি উভয়ই সংজ্ঞায়িত করে ) এবং এইভাবে এনটিটিস্ট্রাস্ট্রাপ্র্যাপারের উদাহরণ , তবে array()বা NULLসঠিক ফাঁকা মান হবে। সুতরাং আপনি নিম্নলিখিতটি করতে পারেন:

$wrapper->field_formatted_text = array();
$wrapper->field_formatted_text = NULL;

তবে সেক্ষেত্রে একটি খালি স্ট্রিং পাস করলে ত্রুটি বাড়ে। নোট করুন যে valueপরিবর্তে আপনি সম্পত্তিটি খালি করার জন্য বেছে নিতে পারেন, সেক্ষেত্রে একটি স্ট্রিং সঠিক ডেটা টাইপ:

$wrapper->field_formatted_text->value = '';

অবশেষে, যদি আপনার ক্ষেত্রটি কোনও একাধিক মানের ক্ষেত্র হয় (এবং এইভাবে আপনার মোড়কটি হ'ল এনটিটিলিস্টওয়্যার্পারের উদাহরণ ) arrayবা NULLসঠিক খালি মান হয় এবং নিম্নলিখিত তিনটি লাইন সমতুল্য হয়:

$wrapper->field_example_multiple->set();
$wrapper->field_example_multiple = array();
$wrapper->field_example_multiple = NULL;

দ্রষ্টব্য: মোড়কগুলিতে clearপদ্ধতিটি কল করা ক্ষেত্রটি খালি মান হিসাবে সেট করার সমতুল্য নয়। ক্ষেত্রটি যখন একটি খালি মানে সেট করা থাকে, তখন এটি ক্ষেত্রের প্যারেন্ট র‌্যাপারে এন্টিমেটাডেটা র্যাপার :: আপডেটপেন্টকে কল করে। এটি অন্যান্য জিনিসের মধ্যে নিশ্চিত করে যে হুক_এনটিটি_প্রোপার্টি_আইনফোsetter callback দ্বারা সংজ্ঞায়িত বলা হয়। কলিং তা করে না।clear


1
মনে রাখবেন যে ক্ষেত্রটি একাধিক এবং প্রয়োজনীয় হয়ে থাকলে সেটিংস ব্যতীত array()বা NULLব্যর্থ হতে পারে, কারণ ক্ষেত্রটি খালি থাকতে পারে না। এটি সাধারণ $nodeক্ষেত্রের কার্যভারের থেকে পৃথক , যেখানে আপনি প্রোগ্রামালিমে খালি প্রয়োজনীয় ক্ষেত্রটি সংরক্ষণ করতে পারেন (এটি কেবল দ্রুপালের নিজস্ব ইউআইয়ের মাধ্যমে সংরক্ষণ করবে না)। এই ক্ষেত্রে, একটি কার্যনির্বাহী হয় array(N), যেখানে এন হ'ল অস্তিত্বহীন এখনও রেফারেন্সড সত্তার আইডি। মনে রাখবেন যে এটি সেই আইডি দিয়ে সংরক্ষণ করবে, সুতরাং আপনার ডেটা আপেক্ষিকভাবে "ভাঙ্গা" হয়ে গেছে; তবে আপনি যদি সেখানে সমস্ত সঠিক জিনিস (উদাহরণস্বরূপ প্রদর্শন স্যুট বা প্যানেল ব্যবহার করে) করছেন তবে থিম স্তরটিকে প্রভাবিত করা উচিত নয়।
জেপি

$w->field_allowed_regions->set(array(null));আমার একচেটিয়া বিকল্পটি আমার বহু-মূল্যযুক্ত শ্রেণীবদ্ধের রেফারেন্স ক্ষেত্রের জন্য কাজ করেছে।
অবিশ্বাস্য

আমার ক্ষেত্রে আমার একক মান সহ একটি সত্তা রেফারেন্স ক্ষেত্র রয়েছে। নিম্নলিখিতগুলি আমার জন্য কাজ করেছে: $ মোড়ক-> ফিল্ড_এন্টিটি_রিফারেন্স-> সেট (এনইউএল);
মার্কোস বুয়ার্ক

3

অন্যান্য উত্তর এবং মন্তব্যে আরও যদি ক্ষেত্রটি একাধিক এবং প্রয়োজনীয় হয় তবে পূর্বে উল্লিখিত হিসাবে আপনি ব্যবহার করতে পারবেন না

$wrapper->field_example_multiple->set()

$wrapper->field_example_multiple->set(NULL)

এমনকি না $wrapper->field_example_multiple->set(array()),

তবে পরিবর্তে আপনি নিম্নলিখিত মানগুলি ব্যবহার করতে পারেন যদি আপনি এর সমস্ত মানের ক্ষেত্রটি সাফ করতে চান:

$wrapper->field_example_multiple->set(array(NULL));

প্রকৃতপক্ষে, একাধিক মান ক্ষেত্রটি 'প্রয়োজনীয়' তে সেট করা আছে কিনা তা এটি কাজ করে এবং তাই আপনার কোডটি শক্তিশালী কিনা তা নিশ্চিত করার জন্য আমি সর্বদা এটি ব্যবহার করার পরামর্শ দিই।

(অবশ্যই, যদি ক্ষেত্রটি 'প্রয়োজনীয়' হয় তবে আপনার সম্ভবত এটি সম্পূর্ণরূপে পরিষ্কার করা উচিত নয়, তবে আপনার কোডটি পুরো সত্তা বা অনুরূপ কিছু মুছতে প্রাথমিক পদক্ষেপ হিসাবে এটি করছে, তাই অনেক সময় এমন হতে পারে যখন এটি হতে পারে শুধু বৈধ হতে।)


সচেতন থাকুন যে $ $ র‍্যাপার-> ফিল্ড_এক্সামেল_মুটিপল-> সেট (অ্যারে (এনওএলএল)) using ব্যবহার করার ফলে ডেটা অ্যারেতে একটি ন্যুয়াল উপাদান থাকবে element এই পদ্ধতিটি মানগুলি সাফ করে না বরং মানগুলিকে একক NULLমানকে সেট করে ।
অ্যালেক্স স্ক্রাইপনিক 23

ভাল যুক্তি. আমি অনুমান করি যে প্রয়োজনীয় মান সাফ না করার বিষয়ে আমাদের মন্তব্যে আমাদের ফিরিয়ে দেয়। ইচ্ছাকৃতভাবে এটি অসম্ভব হয়ে উঠেছে।
মার্টিন কিউ

সত্যিকার অর্থে, একটি প্রয়োজনীয় ক্ষেত্রের কমপক্ষে একটি নন-নাল মান থাকতে হবে। আপনি যদি প্রয়োজনীয় মাল্টিভ্যালুয়েড ফিল্ডটি পুনরায় সেট করতে চান তবে নতুন মানটি দিয়ে এটি ওভাররাইট করুন। অর্থ:$product_display->field_product = array($product_id);
ইন্টারড্রপার

2

এটি প্রদর্শিত হয় যে অন্যান্য মন্তব্যে তালিকাবদ্ধ জটিলতাগুলি কেবলমাত্র প্রয়োজনীয় ক্ষেত্রে প্রাসঙ্গিক। যদি ক্ষেত্রের প্রয়োজন হয় না, তবে এটি বেশ সহজ হওয়া উচিত:

$wrapper->field_foo = NULL;

ক্ষেত্রের বৈশিষ্ট্যগুলি পরীক্ষা করতে আপনি মোড়ক ব্যবহার করতে পারেন:

$properties = $wrapper->getPropertyInfo();
$field_required = !empty($properties['field_foo']['required']);

প্রসঙ্গের উপর নির্ভর করে আপনি কেবল একটি ক্ষেত্রের বৈশিষ্ট্যগুলি ব্যবহার করে এটি পেতে পারেন:

$wrapper->getPropertyInfo('field_foo');

1

এই সমস্যার আর একটি সমাধান হতে পারে EntityMetadataWrapper::clear

$entity_wrapper->field->clear()


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