Skill

ফর্ম হ্যান্ডলিং এবং ভ্যালিডেশন

কেকপিএইচপি (CakePHP) - Web Development

262

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

এই গাইডে আমরা CakePHP-তে ফর্ম হ্যান্ডলিং এবং ভ্যালিডেশন কীভাবে করতে হয় তা বিস্তারিতভাবে দেখব।


ফর্ম হ্যান্ডলিং (Form Handling)

CakePHP তে ফর্ম হ্যান্ডলিং সাধারণত কন্ট্রোলার, ভিউ এবং মডেল এর মাধ্যমে করা হয়। যখন ইউজার একটি ফর্ম সাবমিট করে, কন্ট্রোলার সেই ইনপুট ডেটা গ্রহণ করে এবং মডেল ব্যবহার করে সেগুলিকে ডাটাবেসে সেভ বা আপডেট করে।

১. ফর্ম তৈরি (Form Creation)

ফর্ম তৈরি করতে CakePHP এর FormHelper ব্যবহার করা হয়। এই হেল্পারটি HTML ফর্ম তৈরি করতে সহায়তা করে এবং ফর্মের ইনপুট ফিল্ডগুলো তৈরি করে।

// src/Controller/ArticlesController.php

public function add()
{
    $article = $this->Articles->newEmptyEntity(); // নতুন Entity তৈরি

    if ($this->request->is('post')) {
        $article = $this->Articles->patchEntity($article, $this->request->getData()); // ফর্ম ডেটা পেস্ট
        if ($this->Articles->save($article)) {
            $this->Flash->success(__('The article has been saved.'));
            return $this->redirect(['action' => 'index']);
        }
        $this->Flash->error(__('Unable to add the article.'));
    }
    $this->set(compact('article'));
}

এখানে, patchEntity() মেথডটি ইনপুট ডেটা মডেলে পেস্ট করে এবং ডেটা সেভ করার জন্য save() মেথডটি ব্যবহার করা হয়।

২. ফর্ম ভিউ (Form View)

CakePHP ফর্ম তৈরি করতে FormHelper ব্যবহার করে HTML ফর্ম তৈরি করা হয়। এটি কন্ট্রোলারের add() বা edit() অ্যাকশনে ব্যবহার করা হয়।

// templates/Articles/add.php

<?= $this->Form->create($article) ?>
<fieldset>
    <legend><?= __('Add Article') ?></legend>
    <?= $this->Form->control('title') ?>
    <?= $this->Form->control('body') ?>
</fieldset>
<?= $this->Form->button(__('Save Article')) ?>
<?= $this->Form->end() ?>

এখানে, create() ফর্মের শুরু, control() ইনপুট ফিল্ড তৈরি এবং end() ফর্মের শেষ করে। ইউজারের ডেটা এই ফর্মের মাধ্যমে কন্ট্রোলারে পাঠানো হবে।


ভ্যালিডেশন (Validation)

ভ্যালিডেশন নিশ্চিত করে যে ইউজার যে ইনপুট পাঠাচ্ছে তা সঠিক এবং অ্যাপ্লিকেশনের জন্য উপযুক্ত। CakePHP-তে মডেল স্তরে ভ্যালিডেশন তৈরি করা হয়।

১. ভ্যালিডেশন রুলস (Validation Rules)

CakePHP-তে ভ্যালিডেশন সাধারণত মডেল ফাইলে করা হয়। Validation ক্লাসের মাধ্যমে আমরা ইনপুট ডেটার জন্য রুলস নির্ধারণ করতে পারি।

// src/Model/Table/ArticlesTable.php

use Cake\Validation\Validator;

public function validationDefault(Validator $validator): Validator
{
    $validator
        ->requirePresence('title', 'create')
        ->notEmptyString('title', 'Title is required')
        ->minLength('title', 5, 'Title must be at least 5 characters long')
        ->maxLength('title', 255, 'Title cannot exceed 255 characters')

        ->requirePresence('body', 'create')
        ->notEmptyString('body', 'Body is required')
        ->minLength('body', 10, 'Body must be at least 10 characters long');
        
    return $validator;
}

এখানে, title এবং body ফিল্ডের জন্য কিছু ভ্যালিডেশন রুলস তৈরি করা হয়েছে:

  • requirePresence(): নির্ধারণ করে যে ফিল্ডটি ফর্ম সাবমিটের সময় অবশ্যই উপস্থিত থাকতে হবে।
  • notEmptyString(): ফিল্ডটি খালি থাকতে পারবে না।
  • minLength(): ফিল্ডের মান কমপক্ষে একটি নির্দিষ্ট দৈর্ঘ্য হতে হবে।
  • maxLength(): ফিল্ডের মান একটি নির্দিষ্ট দৈর্ঘ্যের বেশি হতে পারবে না।

২. ভ্যালিডেশন চেক করা

যখন আপনি ফর্মের ডেটা গ্রহণ করেন, CakePHP আপনার তৈরি করা ভ্যালিডেশন রুলস অনুযায়ী চেক করবে। যদি কোনো ইনপুট ভুল থাকে, তাহলে ফর্মে ত্রুটি মেসেজ প্রদর্শন করবে। উদাহরণ:

if ($this->Articles->save($article)) {
    $this->Flash->success(__('The article has been saved.'));
    return $this->redirect(['action' => 'index']);
} else {
    $this->Flash->error(__('Unable to add the article.'));
}

এই কোডটি তখন কাজ করবে যখন কোনো ভ্যালিডেশন ত্রুটি ঘটবে এবং আপনি ফর্মে ত্রুটি বার্তা দেখাতে পারবেন।


ফর্মে ত্রুটি বার্তা প্রদর্শন (Displaying Error Messages)

CakePHP তে ফর্মের ত্রুটি বার্তা সহজেই দেখানো যায়। FormHelper এর মাধ্যমে, আপনি ফর্ম ফিল্ডের ত্রুটিগুলি ভিউ-তে প্রদর্শন করতে পারেন।

// templates/Articles/add.php

<?= $this->Form->create($article) ?>
<fieldset>
    <legend><?= __('Add Article') ?></legend>
    <?= $this->Form->control('title') ?>
    <?= $this->Form->error('title') ?>  <!-- Title Error Display -->
    <?= $this->Form->control('body') ?>
    <?= $this->Form->error('body') ?>   <!-- Body Error Display -->
</fieldset>
<?= $this->Form->button(__('Save Article')) ?>
<?= $this->Form->end() ?>

এখানে, error() মেথড ব্যবহার করে আপনি কোনো নির্দিষ্ট ইনপুট ফিল্ডের ত্রুটি বার্তা প্রদর্শন করতে পারবেন।


CakePHP তে ফর্ম হ্যান্ডলিং এবং ভ্যালিডেশন প্রক্রিয়া অনেক সহজ এবং শক্তিশালী। ফর্ম সাবমিট করার সময় ইউজারের ইনপুট কনট্রোলার দ্বারা গ্রহণ করা হয় এবং মডেল ব্যবহার করে সেগুলিকে ডাটাবেসে সেভ বা আপডেট করা হয়। CakePHP-তে ভ্যালিডেশন রুলস তৈরি করে আপনি ডেটার সঠিকতা নিশ্চিত করতে পারেন এবং ত্রুটি বার্তা প্রদর্শন করতে পারেন। এটি আপনার অ্যাপ্লিকেশনকে আরও নিরাপদ এবং ইউজার-ফ্রেন্ডলি করে তোলে।

Content added By

CakePHP তে Form Helper একটি শক্তিশালী টুল, যা HTML ফর্ম তৈরি এবং পরিচালনা সহজ করে তোলে। এটি বিশেষ করে ডাটা সাবমিশন, ভ্যালিডেশন, এবং সাবমিশন পরবর্তী ইউজার ইন্টারফেস ম্যানেজমেন্টে ব্যবহৃত হয়। CakePHP তে Form Helper ব্যবহার করে ফর্মের HTML কোড দ্রুত এবং সঠিকভাবে তৈরি করা সম্ভব, পাশাপাশি তা Model এবং Controller এর সাথে ইন্টিগ্রেট করা যায়।


Form Helper কী?

Form Helper একটি CakePHP এর বিল্ট-ইন কম্পোনেন্ট যা HTML ফর্ম তৈরি করার জন্য ব্যবহৃত হয়। এটি PHP কোডের মাধ্যমে HTML ফর্ম তৈরি করার সময় স্বয়ংক্রিয়ভাবে নিরাপত্তা এবং ইউজার ইন্টারফেস উন্নত করতে সহায়তা করে। উদাহরণস্বরূপ, এটি ডাটা সাবমিট করার জন্য ফর্মের মধ্যে সঠিক action, method, এবং CSRF টোকেন অন্তর্ভুক্ত করে।


Form Helper ব্যবহার করার জন্য প্রস্তুতি

CakePHP তে Form Helper ব্যবহার করার জন্য প্রথমে আপনাকে আপনার Controller এ এই Helper লোড করতে হবে। সাধারণত, এটি কন্ট্রোলারের ডিফল্ট সেটআপে লোড হয়ে থাকে।

// src/Controller/AppController.php
public function initialize(): void
{
    parent::initialize();
    $this->loadComponent('Flash');
    $this->loadHelper('Form');
}

এখানে loadHelper('Form') মেথড ব্যবহার করা হয়েছে। তবে, অধিকাংশ সময় CakePHP এর ডিফল্ট কনফিগারেশনে Form Helper লোড হয়ে থাকে, তাই আলাদা করে লোড করার প্রয়োজন নেই।


Form Helper এর প্রধান ফিচারসমূহ

১. ফর্ম স্টার্ট করা

CakePHP তে একটি ফর্ম শুরু করতে FormHelper::create() মেথড ব্যবহার করা হয়। এটি HTML ফর্মের শুরুর <form> ট্যাগটি তৈরি করে।

// src/Template/Posts/add.php
<?= $this->Form->create($post) ?>

এখানে $post হলো আপনার মডেলের অবজেক্ট, যা ফর্মের মাধ্যমে ডাটা সাবমিট করবে।

২. ইনপুট ফিল্ড তৈরি করা

ফর্মে ইনপুট ফিল্ড তৈরি করতে FormHelper::control() মেথড ব্যবহার করা হয়। এটি স্বয়ংক্রিয়ভাবে HTML ইনপুট ট্যাগ তৈরি করে এবং মডেল ফিল্ডের সাথে কানেক্ট করে।

// src/Template/Posts/add.php
<?= $this->Form->control('title') ?>
<?= $this->Form->control('body') ?>

এখানে title এবং body হলো মডেল ফিল্ড, এবং FormHelper::control() মেথড এই ফিল্ডগুলোর জন্য HTML ইনপুট ফিল্ড তৈরি করবে।

৩. সাবমিট বাটন তৈরি করা

ফর্মে একটি সাবমিট বাটন যোগ করতে FormHelper::submit() মেথড ব্যবহার করা হয়।

// src/Template/Posts/add.php
<?= $this->Form->submit('Save Post') ?>

এটি ফর্মের শেষে একটি সাবমিট বাটন তৈরি করবে।

৪. ফর্মের শেষ করা

ফর্ম সম্পন্ন করতে FormHelper::end() মেথড ব্যবহার করা হয়। এটি HTML ফর্মের শেষ </form> ট্যাগটি তৈরি করবে।

// src/Template/Posts/add.php
<?= $this->Form->end() ?>

CakePHP তে Form Helper এর অ্যাডভান্সড ফিচার

১. ফর্মের ভ্যালিডেশন

ফর্মে ভ্যালিডেশন হ্যান্ডলিং স্বয়ংক্রিয়ভাবে করা যায় যদি আপনি Model এ ভ্যালিডেশন যুক্ত করেন। ফর্ম সাবমিট করার সময় যদি কোনো ত্রুটি থাকে, তবে CakePHP ঐ ত্রুটির বার্তা ফর্মের সাথে দেখাবে।

// src/Model/Table/PostsTable.php
public function validationDefault(Validator $validator): Validator
{
    $validator
        ->requirePresence('title', 'create')
        ->notEmptyString('title', 'A title is required')
        ->maxLength('title', 255, 'Title cannot be longer than 255 characters');
    
    return $validator;
}

এখানে, title ফিল্ডের জন্য ভ্যালিডেশন যুক্ত করা হয়েছে। CakePHP ফর্মের মাধ্যমে সাবমিট করার সময় যদি ব্যবহারকারী ফাঁকা title পাঠায়, তবে একটি ত্রুটির বার্তা প্রদর্শিত হবে।

২. ড্রপডাউন (Select) ফিল্ড তৈরি করা

CakePHP তে ড্রপডাউন লিস্ট তৈরি করতে FormHelper::select() মেথড ব্যবহার করা হয়। এটি একটি সিলেকশন ড্রপডাউন তৈরি করে, যেখানে আপনি ডাটা লোড করতে পারেন।

// src/Template/Posts/add.php
<?= $this->Form->control('category_id', ['options' => $categories]) ?>

এখানে, $categories একটি অ্যারে, যা ড্রপডাউন লিস্টের অপশনগুলোর তালিকা ধারণ করবে।

৩. চেকবক্স (Checkbox) তৈরি করা

চেকবক্স তৈরি করতে FormHelper::control() মেথডে type অ্যাট্রিবিউট ব্যবহার করা হয়।

// src/Template/Posts/add.php
<?= $this->Form->control('is_published', ['type' => 'checkbox']) ?>

এটি একটি চেকবক্স ইনপুট ফিল্ড তৈরি করবে।

৪. হিডেন ফিল্ড তৈরি করা

হিডেন ইনপুট ফিল্ড তৈরি করতে FormHelper::hidden() মেথড ব্যবহার করা হয়।

// src/Template/Posts/add.php
<?= $this->Form->hidden('user_id', ['value' => $userId]) ?>

এটি একটি হিডেন ফিল্ড তৈরি করবে এবং $userId ভ্যালু সেট করবে।


Form Helper এর অন্যান্য ফিচার

  • Form Helper এর জন্য কাস্টম CSS ক্লাস: আপনি ফর্মের ইনপুট ফিল্ডে কাস্টম CSS ক্লাস যোগ করতে পারেন।

    <?= $this->Form->control('title', ['class' => 'my-class']) ?>
    
  • Multi-step ফর্ম: একাধিক ধাপে ফর্ম প্রক্রিয়া পরিচালনা করার জন্য, একাধিক ফর্ম স্টেপ তৈরি করা যেতে পারে।

    <?= $this->Form->create($model, ['url' => ['controller' => 'Posts', 'action' => 'add']]) ?>
    

CakePHP এর Form Helper একটি শক্তিশালী টুল যা HTML ফর্ম তৈরি এবং পরিচালনা করা সহজ করে তোলে। এটি স্বয়ংক্রিয়ভাবে নিরাপত্তা, ভ্যালিডেশন এবং ডাটা সাবমিশন পরিচালনা করতে সহায়তা করে। Form Helper ব্যবহার করে আপনি দ্রুত এবং কার্যকরভাবে ফর্ম তৈরি করতে পারেন, পাশাপাশি এটি ব্যবহারকারীর ইনপুট সঠিকভাবে ম্যানেজ করতে সহায়ক হয়।

Content added By

CakePHP ফ্রেমওয়ার্কে ফর্ম তৈরি এবং সাবমিট করা একটি সহজ এবং সরল প্রক্রিয়া। CakePHP এর ফর্ম হেলপার আপনাকে HTML ফর্ম তৈরি করতে সহায়তা করে এবং ইউজারের ইনপুট ডেটা প্রক্রিয়া করে। এই গাইডে, আমরা ফর্ম তৈরি এবং সাবমিট করার পদ্ধতি দেখব।


CakePHP তে ফর্ম তৈরি করা

CakePHP-তে ফর্ম তৈরি করতে FormHelper ব্যবহার করা হয়। FormHelper ব্যবহার করলে আপনি সহজে ফর্ম তৈরি করতে পারবেন এবং ফর্মের ডেটা প্রক্রিয়া করতে পারবেন। ফর্ম তৈরি করার জন্য আপনাকে সাধারণত কন্ট্রোলারের add() বা edit() অ্যাকশনের ভিউ ফাইলে ফর্ম কোড লিখতে হয়।

১. ফর্ম তৈরি করার জন্য কন্ট্রোলার

ধরা যাক, আপনি একটি আর্টিকেল তৈরি করার জন্য ফর্ম তৈরি করতে চান। প্রথমে, ArticlesController.php কন্ট্রোলারে একটি add() অ্যাকশন তৈরি করতে হবে:

// src/Controller/ArticlesController.php

public function add()
{
    $article = $this->Articles->newEmptyEntity(); // নতুন একটি article অবজেক্ট তৈরি
    if ($this->request->is('post')) {
        $article = $this->Articles->patchEntity($article, $this->request->getData()); // ফর্ম ডেটা প্যাচ করা
        if ($this->Articles->save($article)) {
            $this->Flash->success(__('Your article has been saved.'));
            return $this->redirect(['action' => 'index']); // সফল হলে index পেজে রিডাইরেক্ট করা
        }
        $this->Flash->error(__('Unable to add your article.'));
    }
    $this->set('article', $article); // ভিউতে article ডেটা পাঠানো
}

২. ভিউ ফাইলে ফর্ম তৈরি করা

এখন, add() অ্যাকশনের জন্য একটি ভিউ ফাইল তৈরি করতে হবে। templates/Articles/add.php ফাইলের মধ্যে ফর্ম তৈরি করা হবে:

// templates/Articles/add.php

<h1>Add New Article</h1>

<?php
// Form তৈরি করা
echo $this->Form->create($article); // FormHelper ব্যবহার করে ফর্ম তৈরি
echo $this->Form->control('title'); // title ফিল্ড তৈরি
echo $this->Form->control('body'); // body ফিল্ড তৈরি
echo $this->Form->button(__('Save Article')); // সাবমিট বাটন
echo $this->Form->end(); // ফর্মের সমাপ্তি
?>

এখানে:

  • $this->Form->create($article) ফর্ম তৈরি করছে এবং $article অবজেক্টের সাথে এটি জড়িত।
  • $this->Form->control() ফাংশনটি HTML ইনপুট ফিল্ড তৈরি করে।
  • $this->Form->button() সাবমিট বাটন তৈরি করে।
  • $this->Form->end() ফর্মটি সমাপ্ত করে।

CakePHP তে ফর্ম সাবমিট করা

CakePHP তে ফর্ম সাবমিট করতে POST পদ্ধতি ব্যবহার করা হয়। যখন ইউজার ফর্মটি সাবমিট করবে, তখন কন্ট্রোলার এ post রিকোয়েস্ট আসবে, এবং আপনি সেই ডেটা প্রক্রিয়া করতে পারবেন।

১. ডেটা প্রসেসিং এবং সংরক্ষণ

কন্ট্রোলারের add() অ্যাকশনটি ফর্ম থেকে ডেটা গ্রহণ করে, এবং এটি প্যাচ করে মডেল অবজেক্টে সেভ করবে। নিচে একটি উদাহরণ দেয়া হলো:

public function add()
{
    $article = $this->Articles->newEmptyEntity(); // একটি খালি article অবজেক্ট তৈরি
    if ($this->request->is('post')) { // যদি পোস্ট রিকোয়েস্ট হয়
        $article = $this->Articles->patchEntity($article, $this->request->getData()); // ফর্ম ডেটা প্যাচ করা
        if ($this->Articles->save($article)) { // ডেটা সেভ করা
            $this->Flash->success(__('Your article has been saved.'));
            return $this->redirect(['action' => 'index']); // সফল হলে index পেজে রিডাইরেক্ট করা
        }
        $this->Flash->error(__('Unable to add your article.')); // ত্রুটি বার্তা
    }
    $this->set('article', $article); // ভিউতে article ডেটা পাঠানো
}

এখানে:

  • patchEntity() ফাংশনটি ফর্ম ডেটা কন্ট্রোলার অবজেক্টে প্যাচ করে (যেমন article অবজেক্ট)।
  • save() ফাংশনটি মডেল অবজেক্টটি ডাটাবেসে সেভ করে।
  • Flash->success() বা Flash->error() ফাংশনটি ইউজারকে সফলতা বা ত্রুটির বার্তা দেখায়।

ফর্মের Validation (যাচাই)

CakePHP তে ফর্ম ডেটা যাচাই করার জন্য Validation ব্যবহার করা হয়। মডেল ফাইলের মধ্যে ডেটা যাচাইয়ের নিয়ম গুলি উল্লেখ করা হয়।

১. Validation Rules (যাচাইয়ের নিয়ম)

উদাহরণস্বরূপ, Article মডেলে title এবং body ফিল্ডের জন্য কিছু validation নিয়ম যোগ করা হয়েছে:

// src/Model/Table/ArticlesTable.php

public function validationDefault(Validator $validator): Validator
{
    $validator
        ->scalar('title')
        ->maxLength('title', 255)
        ->requirePresence('title', 'create')
        ->notEmptyString('title', 'Title is required.');

    $validator
        ->scalar('body')
        ->requirePresence('body', 'create')
        ->notEmptyString('body', 'Body is required.');

    return $validator;
}

এখানে:

  • title এবং body ফিল্ডগুলির জন্য যাচাই নিয়ম দেওয়া হয়েছে।
  • requirePresence() ফাংশনটি নিশ্চিত করে যে, ফিল্ডটি ফর্ম সাবমিটের সময় উপস্থিত থাকবে।
  • notEmptyString() ফাংশনটি নিশ্চিত করে যে, ফিল্ডটি খালি থাকবে না।

২. ভিউতে Validation Error দেখানো

ভ্যালিডেশন ফেইল হলে, CakePHP স্বয়ংক্রিয়ভাবে ত্রুটির বার্তা দেখায়। তবে আপনি কাস্টমাইজড বার্তা প্রদর্শন করতে পারেন:

// templates/Articles/add.php

<h1>Add New Article</h1>

<?php
echo $this->Form->create($article);
echo $this->Form->control('title');
echo $this->Form->control('body');
echo $this->Form->button(__('Save Article'));
echo $this->Form->end();

if ($article->getErrors()) {
    foreach ($article->getErrors() as $field => $errors) {
        foreach ($errors as $error) {
            echo '<div class="error">' . h($error) . '</div>';
        }
    }
}
?>

এখানে:

  • getErrors() ফাংশনটি মডেল অবজেক্টের ভুল/ত্রুটি পরীক্ষা করে এবং আপনি সেগুলি ইউজারকে দেখাতে পারেন।

CakePHP তে ফর্ম তৈরি এবং সাবমিট করা অত্যন্ত সহজ এবং সোজা। FormHelper ব্যবহার করে আপনি ফর্ম তৈরি করতে পারেন এবং Validation এর মাধ্যমে ডেটা যাচাই করতে পারেন। এছাড়া, ফর্ম সাবমিটের পর ডেটা প্রসেসিং এবং মডেল অবজেক্টে সংরক্ষণও খুব সহজ। এটি একটি শক্তিশালী এবং কার্যকরী ফর্ম হ্যান্ডলিং পদ্ধতি যা আপনার অ্যাপ্লিকেশনকে আরও শক্তিশালী করে তোলে।

Content added By

CakePHP ফ্রেমওয়ার্কে ডেটা ভ্যালিডেশন একটি অত্যন্ত গুরুত্বপূর্ণ বিষয়, যা ডেটার সঠিকতা নিশ্চিত করে। CakePHP দুটি ভ্যালিডেশন পদ্ধতি প্রদান করে: Built-in Validation এবং Custom Validation। এখানে আমরা এই দুটি ভ্যালিডেশন পদ্ধতির সম্পর্কে বিস্তারিত আলোচনা করব এবং কিভাবে এগুলি ব্যবহার করা হয় তা দেখাবো।


১. Built-in Validation

CakePHP এর মধ্যে কিছু ডিফল্ট বা বিল্ট-ইন ভ্যালিডেশন রুল রয়েছে যা সাধারণত বেশিরভাগ পরিস্থিতিতে কাজ করে। এই বিল্ট-ইন ভ্যালিডেশনগুলি CakePHP Validator ক্লাসের মাধ্যমে পরিচালিত হয়।

১.১. Validator ক্লাসের ব্যবহার

CakePHP এ ডেটা ভ্যালিডেশন করার জন্য সাধারণত Table ক্লাসে একটি validationDefault() মেথড থাকে। এখানে বিভিন্ন বিল্ট-ইন ভ্যালিডেশন রুল যেমন notEmpty(), email(), minLength(), maxLength() ইত্যাদি ব্যবহার করা যায়।

উদাহরণ: একটি বিল্ট-ইন ভ্যালিডেশন রুল ব্যবহার করা

// src/Model/Table/ArticlesTable.php

namespace App\Model\Table;

use Cake\ORM\Table;
use Cake\Validation\Validator;

class ArticlesTable extends Table
{
    public function validationDefault(Validator $validator): Validator
    {
        $validator
            ->notEmptyString('title', 'Title is required')
            ->minLength('title', 5, 'Title must be at least 5 characters')
            ->maxLength('title', 255, 'Title cannot be more than 255 characters')
            ->email('email', false, 'Please provide a valid email address')
            ->notEmptyString('body', 'Body is required');

        return $validator;
    }
}
  • notEmptyString(): এটি ফিল্ডটি খালি না হওয়ার জন্য ভ্যালিডেশন প্রদান করে।
  • minLength(): এটি একটি ফিল্ডের মিনিমাম দৈর্ঘ্য চেক করে।
  • maxLength(): এটি একটি ফিল্ডের ম্যাক্সিমাম দৈর্ঘ্য চেক করে।
  • email(): এটি একটি ইমেইল ফিল্ডের ভ্যালিডিটি যাচাই করে।

১.২. বিল্ট-ইন রুলসের কিছু উদাহরণ

  • notEmptyString(): ফিল্ডটি খালি হতে দেওয়া যাবে না।
  • email(): ফিল্ডের মান একটি বৈধ ইমেইল ঠিকানা হতে হবে।
  • minLength(): ফিল্ডের মান একটি নির্দিষ্ট দৈর্ঘ্যের কম হতে পারবে না।
  • maxLength(): ফিল্ডের মান একটি নির্দিষ্ট দৈর্ঘ্যের বেশি হতে পারবে না।
  • numeric(): ফিল্ডের মান একটি সংখ্যা হতে হবে।

২. Custom Validation

যখন আপনি বিশেষ ধরনের ভ্যালিডেশন প্রয়োজন, যেমন নির্দিষ্ট শর্ত অনুযায়ী ভ্যালিডেশন তৈরি, তখন Custom Validation ব্যবহার করা হয়। CakePHP তে Custom Validation তৈরি করা খুব সহজ এবং আপনি নিজে একটি কাস্টম ভ্যালিডেশন রুল তৈরি করতে পারেন।

২.১. কাস্টম ভ্যালিডেশন রুল তৈরি করা

CakePHP তে কাস্টম ভ্যালিডেশন রুল তৈরি করতে আপনাকে Validator ক্লাসে একটি নতুন মেথড তৈরি করতে হবে যা আপনার কাস্টম শর্ত পূর্ণ করবে।

উদাহরণ: একটি কাস্টম ভ্যালিডেশন রুল তৈরি করা

// src/Model/Table/ArticlesTable.php

namespace App\Model\Table;

use Cake\ORM\Table;
use Cake\Validation\Validator;

class ArticlesTable extends Table
{
    public function validationDefault(Validator $validator): Validator
    {
        $validator
            ->notEmptyString('title', 'Title is required')
            ->minLength('title', 5, 'Title must be at least 5 characters')
            ->maxLength('title', 255, 'Title cannot be more than 255 characters')
            ->add('body', 'custom', [
                'rule' => [$this, 'validateBody'],
                'message' => 'Body must not contain offensive words.',
            ])
            ->notEmptyString('body', 'Body is required');

        return $validator;
    }

    // কাস্টম ভ্যালিডেশন মেথড
    public function validateBody($value, $context)
    {
        $offensiveWords = ['badword1', 'badword2'];
        foreach ($offensiveWords as $word) {
            if (strpos($value, $word) !== false) {
                return false;  // যদি অপরাধমূলক শব্দ থাকে, ভ্যালিডেশন ফেল করবে
            }
        }
        return true;
    }
}
  • add(): কাস্টম ভ্যালিডেশন রুল যোগ করার জন্য ব্যবহৃত হয়।
  • validateBody(): এটি একটি কাস্টম মেথড যা body ফিল্ডের মানে অপরাধমূলক শব্দ চেক করে। যদি এমন শব্দ পাওয়া যায়, তাহলে ভ্যালিডেশন ফেল হবে।

২.২. কাস্টম ভ্যালিডেশন রুলের উদাহরণ

  • ইমেইল ভ্যালিডেশন: একটি কাস্টম ভ্যালিডেশন তৈরি করে যাচাই করতে পারেন যে, একটি ইমেইল ঠিকানা একটি নির্দিষ্ট ডোমেইনে থাকতে হবে।
public function validateEmailDomain($value, $context)
{
    $validDomains = ['example.com', 'mydomain.com'];
    $domain = substr(strrchr($value, '@'), 1);  // ইমেইল থেকে ডোমেইন বের করা
    if (!in_array($domain, $validDomains)) {
        return false;
    }
    return true;
}
  • ফোন নম্বর ভ্যালিডেশন: ফোন নম্বরের জন্য একটি কাস্টম রুল তৈরি করতে পারেন যা শুধু নির্দিষ্ট ফরম্যাটে ফোন নম্বর গ্রহণ করবে।
public function validatePhoneNumber($value, $context)
{
    return preg_match('/^\+?[1-9]\d{1,14}$/', $value);  // ইন্টারন্যাশনাল ফোন নম্বর ফরম্যাট
}

৩. কাস্টম এবং বিল্ট-ইন ভ্যালিডেশন কম্বিনেশন

CakePHP এ আপনি বিল্ট-ইন এবং কাস্টম ভ্যালিডেশন রুলস একসাথে ব্যবহার করতে পারেন, যাতে আপনি প্রয়োজনীয় ভ্যালিডেশন ক্রাইটেরিয়া সম্পন্ন করতে পারেন।

উদাহরণ: কাস্টম এবং বিল্ট-ইন ভ্যালিডেশন একসাথে ব্যবহার

// src/Model/Table/UsersTable.php

namespace App\Model\Table;

use Cake\ORM\Table;
use Cake\Validation\Validator;

class UsersTable extends Table
{
    public function validationDefault(Validator $validator): Validator
    {
        $validator
            ->notEmptyString('username', 'Username is required')
            ->minLength('username', 3, 'Username must be at least 3 characters')
            ->add('email', 'custom', [
                'rule' => 'email',
                'message' => 'Please enter a valid email address',
            ])
            ->add('email', 'unique', [
                'rule' => 'validateUnique',
                'provider' => 'table',
                'message' => 'Email already exists',
            ])
            ->add('phone', 'custom', [
                'rule' => [$this, 'validatePhoneNumber'],
                'message' => 'Invalid phone number',
            ]);

        return $validator;
    }

    public function validatePhoneNumber($value, $context)
    {
        return preg_match('/^\+?[1-9]\d{1,14}$/', $value);
    }
}

এখানে, username এর জন্য বিল্ট-ইন notEmptyString() এবং minLength() ব্যবহার করা হয়েছে, email এর জন্য কাস্টম ভ্যালিডেশন এবং phone এর জন্য কাস্টম রুল ব্যবহার করা হয়েছে।


CakePHP তে Built-in Validation এবং Custom Validation দুটি খুবই শক্তিশালী বৈশিষ্ট্য। আপনি যখন সাধারণ ডেটা ভ্যালিডেশন চান, তখন বিল্ট-ইন রুলস ব্যবহার করতে পারেন, এবং যখন আপনার বিশেষ ধরনের ভ্যালিডেশন প্রয়োজন হয়, তখন কাস্টম ভ্যালিডেশন তৈরি করতে পারেন। CakePHP এর ভ্যালিডেশন সিস্টেম খুবই নমনীয় এবং কার্যকর, যা আপনার অ্যাপ্লিকেশনকে ডেটার সঠিকতা নিশ্চিত করতে সাহায্য করে।

Content added By

CakePHP তে ফর্ম ডেটা হ্যান্ডলিং এবং এর সাথে ত্রুটি বার্তা (Error Messages) সঠিকভাবে পরিচালনা করা খুবই গুরুত্বপূর্ণ। এটি ব্যবহারকারীকে ফর্ম সাবমিট করার সময় ডেটা প্রক্রিয়া এবং কোন ত্রুটি ঘটলে তা সঠিকভাবে প্রদর্শন করতে সহায়তা করে। এই টিউটোরিয়ালে আমরা CakePHP তে ফর্ম ডেটা হ্যান্ডলিং এবং ত্রুটি বার্তা প্রদর্শনের প্রক্রিয়া সম্পর্কে বিস্তারিত আলোচনা করবো।


১. ফর্ম ডেটা হ্যান্ডলিং

CakePHP তে ফর্ম ডেটা হ্যান্ডলিং করতে মূলত request->getData() এবং মডেল (Model) ব্যবহার করা হয়। ফর্মে ইউজার যে ডেটা ইনপুট দেয়, তা কন্ট্রোলারে request->getData() এর মাধ্যমে গ্রহণ করা হয় এবং মডেলটির মাধ্যমে ডাটাবেসে সেভ করা হয়।

১.১. ফর্ম ডেটা গ্রহণ

কোনো ফর্ম সাবমিট করার সময়, CakePHP ফর্ম ডেটা কন্ট্রোলারে পাস করে। নিচের উদাহরণটি দেখুন:

public function add() {
    $article = $this->Articles->newEmptyEntity();  // একটি নতুন এন্টিটি তৈরি
    if ($this->request->is('post')) {  // ফর্ম সাবমিট হলে
        // ফর্ম ডেটা মডেলে পাস করা
        $article = $this->Articles->patchEntity($article, $this->request->getData());
        if ($this->Articles->save($article)) {
            $this->Flash->success('আর্টিকেল সফলভাবে সেভ করা হয়েছে');
            return $this->redirect(['action' => 'index']);
        }
        $this->Flash->error('আর্টিকেল সেভ করতে সমস্যা হয়েছে');
    }
    $this->set(compact('article'));  // ভিউতে পাঠানোর জন্য
}

এখানে:

  • $this->request->getData(): এটি ফর্ম থেকে আসা ডেটা গ্রহণ করে।
  • patchEntity(): এটি ডেটা মডেলের সাথে মেলানো (প্যাচিং) করে।

১.২. ফর্মে ডেটা পুনরায় প্রদর্শন

যদি ফর্মে ত্রুটি থাকে এবং ব্যবহারকারী আবার ফর্ম পূর্ণ করে পাঠায়, তখন আগের ইনপুট ফিল্ডগুলো আবার প্রদর্শন করতে হবে। CakePHP এই কাজটি অটোমেটিকভাবে করে দেয়, কিন্তু আপনি যদি ম্যানুয়ালি সেট করতে চান, তবে কোডের নিচে ফর্মের মানে পাঠানোর জন্য set() ব্যবহার করতে পারেন।

$this->set(compact('article'));  // $article মডেল ডেটা ভিউতে পাঠাবে

এটি ফর্ম ইনপুট ফিল্ডগুলোর পূর্বের মান ফিরে এনে দিবে।


২. ত্রুটি বার্তা (Error Messages)

CakePHP তে ফর্মের ডেটা ভ্যালিডেশন এবং ত্রুটি বার্তা প্রদর্শনের জন্য শক্তিশালী ব্যবস্থা রয়েছে। আপনি মডেল ভ্যালিডেশন (Model Validation) ব্যবহার করে ডেটার বৈধতা যাচাই করতে পারেন এবং যদি কোনো ত্রুটি থাকে, তা ফ্ল্যাশ মেসেজ বা ভিউতে প্রদর্শন করতে পারেন।

২.১. মডেল ভ্যালিডেশন

CakePHP তে মডেল ভ্যালিডেশন সেট করার জন্য Validation ক্লাস ব্যবহার করা হয়। আপনি এই ক্লাসে বিভিন্ন ভ্যালিডেশন রুল সেট করতে পারেন।

use Cake\Validation\Validator;

public function validationDefault(Validator $validator): Validator
{
    $validator
        ->notEmptyString('title', 'শিরোনাম ফিল্ডটি অবশ্যই পূর্ণ করতে হবে')
        ->notEmptyString('body', 'বডি ফিল্ডটি অবশ্যই পূর্ণ করতে হবে')
        ->minLength('body', 20, 'বডি ফিল্ডের দৈর্ঘ্য অন্তত ২০ অক্ষর হতে হবে');

    return $validator;
}

এখানে:

  • notEmptyString(): ফিল্ড খালি থাকতে পারে না।
  • minLength(): একটি নির্দিষ্ট দৈর্ঘ্যের চেয়ে ছোট হতে পারে না।

২.২. ত্রুটি বার্তা ভিউতে দেখানো

যখন একটি ফর্ম সঠিকভাবে পূর্ণ করা হয় না, তখন সেই ত্রুটিগুলো ভিউতে প্রদর্শন করতে হবে। আপনি $form->control() ব্যবহার করে ইনপুট ফিল্ডের পাশে ত্রুটি বার্তা প্রদর্শন করতে পারেন।

<?= $this->Form->create($article) ?>
<?= $this->Form->control('title') ?>
<?= $this->Form->control('body') ?>
<?= $this->Form->button('Submit') ?>
<?= $this->Form->end() ?>

এখানে, যদি title অথবা body ফিল্ডে কোনো ত্রুটি থাকে, তবে তা ফর্মের পাশেই দেখানো হবে।

২.৩. ফ্ল্যাশ মেসেজ দিয়ে ত্রুটি বার্তা প্রদর্শন

কন্ট্রোলারে আপনি যদি ফর্ম ডেটা সেভ করতে না পারেন বা যদি কোনো ভ্যালিডেশন ত্রুটি থাকে, তবে আপনি Flash ব্যবহার করে ত্রুটি বার্তা প্রদর্শন করতে পারেন।

if ($this->Articles->save($article)) {
    $this->Flash->success('আর্টিকেল সফলভাবে সেভ করা হয়েছে');
    return $this->redirect(['action' => 'index']);
} else {
    $this->Flash->error('ফর্মে কিছু ভুল আছে, অনুগ্রহ করে আবার চেষ্টা করুন');
}

এখানে:

  • $this->Flash->error(): ফর্মের ত্রুটি দেখানোর জন্য।
  • $this->Flash->success(): সফল মেসেজ দেখানোর জন্য।

২.৪. একাধিক ত্রুটি বার্তা

একাধিক ত্রুটি বার্তা প্রদর্শন করতে আপনি নিচের কোডটি ব্যবহার করতে পারেন:

if ($article->getErrors()) {
    foreach ($article->getErrors() as $field => $errors) {
        foreach ($errors as $error) {
            $this->Flash->error($error);
        }
    }
}

এটি সকল ত্রুটি বার্তা একে একে ফ্ল্যাশ মেসেজের মাধ্যমে দেখাবে।


CakePHP তে ফর্ম ডেটা হ্যান্ডলিং এবং ত্রুটি বার্তা প্রদর্শন একটি গুরুত্বপূর্ণ দিক। ফর্ম ডেটা গ্রহন করতে request->getData() ব্যবহার করা হয় এবং মডেল ভ্যালিডেশন এর মাধ্যমে ইনপুট ডেটার বৈধতা পরীক্ষা করা হয়। যখন ডেটা ভ্যালিড হয় না, তখন ত্রুটি বার্তা ব্যবহারকারীকে প্রদর্শন করা হয়, যা ব্যবহারকারীর জন্য একটি সঠিক নির্দেশনা প্রদান করে। এর ফলে CakePHP অ্যাপ্লিকেশনগুলোতে ফর্ম ডেটা হ্যান্ডলিং এবং ত্রুটি ব্যবস্থাপনা আরও সহজ এবং কার্যকর হয়।

Content added By
Promotion

Are you sure to start over?

Loading...