বার্দির সঠিক উত্তর দিয়েছিলেন, যে দ্রুপাল ৮.এর ক্ষেত্রে একটি ক্ষেত্রের মধ্যে বৈধতা যুক্ত করার বিষয়ে একটি সীমাবদ্ধতা সঠিক উপায় Here এখানে একটি উদাহরণ।
নীচের উদাহরণে, আমি টাইপের নোডের সাথে কাজ করব podcast
, যার একক মান ক্ষেত্র রয়েছে field_podcast_duration
। এই ক্ষেত্রের মানটি এইচএইচ: এমএম: এসএস (ঘন্টা, মিনিট এবং সেকেন্ড) হিসাবে ফর্ম্যাট করা দরকার।
সীমাবদ্ধতা তৈরি করতে দুটি শ্রেণি যুক্ত করা দরকার। প্রথমটি সীমাবদ্ধ সংজ্ঞা, এবং দ্বিতীয়টি সীমাবদ্ধতা বৈধকারক ator এই দুটিই প্লাগইন, এর নেমস্পেসে Drupal\[MODULENAME]\Plugin\Validation\Constraint
।
প্রথম, সীমাবদ্ধ সংজ্ঞা। নোট করুন যে প্লাগইন আইডিটি 'পডকাস্টডুরেশন' হিসাবে দেওয়া হয়েছে, ক্লাসের টিকা (মন্তব্য) তে। এটি আরও নিচে ব্যবহৃত হবে।
namespace Drupal\[MODULENAME]\Plugin\Validation\Constraint;
use Symfony\Component\Validator\Constraint;
/**
* Checks that the submitted duration is of the format HH:MM:SS
*
* @Constraint(
* id = "PodcastDuration",
* label = @Translation("Podcast Duration", context = "Validation"),
* )
*/
class PodcastDurationConstraint extends Constraint {
// The message that will be shown if the format is incorrect.
public $incorrectDurationFormat = 'The duration must be in the format HH:MM:SS or HHH:MM:SS. You provided %duration';
}
এর পরে, আমাদের সীমাবদ্ধতা বৈধকারক সরবরাহ করতে হবে। এই শ্রেণীর এই নামটি উপরে Validator
যুক্ত করা ক্লাসের নাম হবে যা এতে যুক্ত হবে:
namespace Drupal\[MODULENAME]\Plugin\Validation\Constraint;
use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;
/**
* Validates the PodcastDuration constraint.
*/
class PodcastDurationConstraintValidator extends ConstraintValidator {
/**
* {@inheritdoc}
*/
public function validate($items, Constraint $constraint) {
// This is a single-item field so we only need to
// validate the first item
$item = $items->first();
// If there is no value we don't need to validate anything
if (!isset($item)) {
return NULL;
}
// Check that the value is in the format HH:MM:SS
if (!preg_match('/^[0-9]{1,2}:[0-5]{1}[0-9]{1}:[0-5]{1}[0-9]{1}$/', $item->value)) {
// The value is an incorrect format, so we set a 'violation'
// aka error. The key we use for the constraint is the key
// we set in the constraint, in this case $incorrectDurationFormat.
$this->context->addViolation($constraint->incorrectDurationFormat, ['%duration' => $item->value]);
}
}
}
পরিশেষে, আমরা আমাদের বাধ্যতা ব্যবহার করতে Drupal এর বলতে চাই field_podcast_duration
উপর podcast
নোড প্রকার। আমরা এটি এখানে hook_entity_bundle_field_info_alter()
:
use Drupal\Core\Entity\EntityTypeInterface;
function HOOK_entity_bundle_field_info_alter(&$fields, EntityTypeInterface $entity_type, $bundle) {
if (!empty($fields['field_podcast_duration'])) {
$fields['field_podcast_duration']->addConstraint('PodcastDuration');
}
}