Zend\Form মডিউল ব্যবহার করে ফর্ম তৈরি করা

Forms এবং Input Validation - জেন্ড ফ্রেমওয়ার্ক (Zend Framework) - Web Development

227

Zend Framework (এখন Laminas) এ Zend\Form মডিউলটি ফর্ম তৈরি এবং এর ব্যবস্থাপনা সহজ করে তোলে। এটি ফর্মের জন্য প্রয়োজনীয় সমস্ত উপাদান যেমন ইনপুট ফিল্ড, বাটন, এবং ভ্যালিডেশন সহজেই তৈরি ও কনফিগার করার সুবিধা দেয়।

ফর্ম তৈরি করার জন্য, আপনাকে প্রথমে ফর্মের জন্য একটি ক্লাস তৈরি করতে হবে। এর মধ্যে ইনপুট ফিল্ডগুলোর নির্দিষ্ট কনফিগারেশন, ভ্যালিডেশন রুলস, এবং সাবমিট বাটন যুক্ত করা হয়।


১. Zend\Form ব্যবহার করার জন্য প্রস্তুতি

Zend\Form মডিউলটি ব্যবহার করার জন্য, প্রথমে নিশ্চিত করতে হবে যে এটি আপনার প্রকল্পে অন্তর্ভুক্ত আছে।

Composer দিয়ে Zend\Form ইনস্টল করা:

আপনার প্রকল্পে Zend\Form মডিউল ইনস্টল করতে Composer ব্যবহার করুন:

composer require laminas/laminas-form

এটি Zend\Form এর সকল প্রয়োজনীয় ক্লাস এবং ডিপেনডেন্সি ইনস্টল করে দিবে।


২. ফর্ম ক্লাস তৈরি করা

প্রথমে একটি নতুন ফর্ম ক্লাস তৈরি করতে হবে। উদাহরণস্বরূপ, আমরা একটি ContactForm তৈরি করব, যা একটি ইউজারের নাম, ইমেইল, এবং মেসেজ ইনপুট ফিল্ড ধারণ করবে।

ফোল্ডার স্ট্রাকচার:

module/Application/src/Form/ContactForm.php

ContactForm.php:

<?php
namespace Application\Form;

use Laminas\Form\Form;
use Laminas\Form\Element;
use Laminas\InputFilter\InputFilter;
use Laminas\Validator;

class ContactForm extends Form
{
    public function __construct($name = null)
    {
        parent::__construct('contact');
        
        // Add 'name' input field
        $this->add([
            'name' => 'name',
            'type' => Element\Text::class,
            'options' => [
                'label' => 'Your Name',
            ],
        ]);
        
        // Add 'email' input field
        $this->add([
            'name' => 'email',
            'type' => Element\Email::class,
            'options' => [
                'label' => 'Your Email',
            ],
        ]);
        
        // Add 'message' input field
        $this->add([
            'name' => 'message',
            'type' => Element\Textarea::class,
            'options' => [
                'label' => 'Your Message',
            ],
        ]);
        
        // Add submit button
        $this->add([
            'name' => 'submit',
            'type' => Element\Submit::class,
            'attributes' => [
                'value' => 'Send Message',
                'id'    => 'submitbutton',
            ],
        ]);
        
        // Add input filter for validation
        $this->setInputFilter($this->getInputFilterSpecification());
    }

    public function getInputFilterSpecification()
    {
        $inputFilter = new InputFilter();

        // Define validation rules for 'name'
        $inputFilter->add([
            'name' => 'name',
            'required' => true,
            'filters' => [
                ['name' => 'StringTrim'],
            ],
            'validators' => [
                [
                    'name' => Validator\StringLength::class,
                    'options' => [
                        'min' => 3,
                    ],
                ],
            ],
        ]);

        // Define validation rules for 'email'
        $inputFilter->add([
            'name' => 'email',
            'required' => true,
            'validators' => [
                [
                    'name' => Validator\EmailAddress::class,
                ],
            ],
        ]);

        // Define validation rules for 'message'
        $inputFilter->add([
            'name' => 'message',
            'required' => true,
            'filters' => [
                ['name' => 'StringTrim'],
            ],
            'validators' => [
                [
                    'name' => Validator\StringLength::class,
                    'options' => [
                        'min' => 10,
                    ],
                ],
            ],
        ]);

        return $inputFilter;
    }
}

এই ফর্মে আমরা তিনটি ইনপুট ফিল্ড (নাম, ইমেইল, মেসেজ) এবং একটি সাবমিট বাটন যোগ করেছি। এছাড়া প্রতিটি ফিল্ডের জন্য ভ্যালিডেশন রুলও নির্ধারণ করেছি।


৩. কন্ট্রোলার তৈরি করা

এখন ফর্মটিকে কন্ট্রোলারে হ্যান্ডল করতে হবে, যেখানে ফর্মটি তৈরি এবং প্রসেস করা হবে। উদাহরণস্বরূপ, আমরা একটি ContactController তৈরি করব।

ফোল্ডার স্ট্রাকচার:

module/Application/src/Controller/ContactController.php

ContactController.php:

<?php
namespace Application\Controller;

use Laminas\Mvc\Controller\AbstractActionController;
use Laminas\View\Model\ViewModel;
use Application\Form\ContactForm;

class ContactController extends AbstractActionController
{
    public function indexAction()
    {
        $form = new ContactForm();

        // যখন ফর্ম সাবমিট হয়
        if ($this->getRequest()->isPost()) {
            $form->setData($this->getRequest()->getPost());

            if ($form->isValid()) {
                // ফর্ম ডাটা প্রসেস করা
                $data = $form->getData();
                // ডাটা দিয়ে কোনো কাজ করা যেতে পারে, যেমন মেইল পাঠানো বা ডাটাবেসে সংরক্ষণ
                // এখানে আমরা শুধু ফর্ম ডাটা ভিউতে পাঠাবো
                return new ViewModel([
                    'form' => $form,
                    'data' => $data,
                ]);
            }
        }

        return new ViewModel([
            'form' => $form,
        ]);
    }
}

এই কন্ট্রোলারটি ফর্ম তৈরি করবে এবং ফর্মটি যখন সাবমিট হবে, তখন তা ভ্যালিডেশন করবে এবং ডাটা প্রসেস করবে। যদি ফর্ম সঠিকভাবে সাবমিট হয়, তাহলে ডাটা ভিউতে পাঠানো হবে।


৪. ভিউ ফাইল তৈরি করা

এখন ফর্মের জন্য একটি ভিউ তৈরি করতে হবে, যাতে ইউজার ইন্টারফেস তৈরি করা যায়।

ফোল্ডার স্ট্রাকচার:

module/Application/view/application/contact/index.phtml

index.phtml:

<h1>Contact Us</h1>

<form action="" method="post">
    <?php echo $this->form()->openTag($form); ?>
    
    <?php echo $this->formLabel($form->get('name')); ?>
    <?php echo $this->formElement($form->get('name')); ?>
    <?php echo $this->formElementErrors($form->get('name')); ?>
    
    <?php echo $this->formLabel($form->get('email')); ?>
    <?php echo $this->formElement($form->get('email')); ?>
    <?php echo $this->formElementErrors($form->get('email')); ?>
    
    <?php echo $this->formLabel($form->get('message')); ?>
    <?php echo $this->formElement($form->get('message')); ?>
    <?php echo $this->formElementErrors($form->get('message')); ?>
    
    <?php echo $this->form()->closeTag($form); ?>
</form>

<?php if (isset($data)): ?>
    <h2>Your Data</h2>
    <pre><?php print_r($data); ?></pre>
<?php endif; ?>

এখানে আমরা ফর্মের সব উপাদান রেন্ডার করেছি। formLabel(), formElement(), এবং formElementErrors() মেথডগুলি ব্যবহার করা হয়েছে, যা ফর্মের ইনপুট ফিল্ড, লেবেল এবং এর ভ্যালিডেশন এররগুলো প্রদর্শন করবে।


৫. রাউটিং কনফিগারেশন

ফর্মটি সঠিকভাবে রাউট করার জন্য module.config.php ফাইলে রাউট সেট করতে হবে।

module.config.php:

<?php
namespace Application;

return [
    'controllers' => [
        'invokables' => [
            'Application\Controller\Contact' => 'Application\Controller\ContactController',
        ],
    ],
    'router' => [
        'routes' => [
            'contact' => [
                'type'    => 'Literal',
                'options' => [
                    'route'    => '/contact',
                    'defaults' => [
                        'controller' => 'Application\Controller\Contact',
                        'action'     => 'index',
                    ],
                ],
            ],
        ],
    ],
    'view_manager' => [
        'template_path_stack' => [
            'application' => __DIR__ . '/../view',
        ],
    ],
];

এখানে /contact রাউটটিকে ContactController এর indexAction এর সাথে ম্যাপ করা হয়েছে।


সারাংশ

Zend Framework এ Zend\Form মডিউল ব্যবহার করে ফর্ম তৈরি করা খুবই সহজ। এটি ফর্মের জন্য ইনপুট ফিল্ড, ভ্যালিডেশন, এবং সাবমিট বাটন তৈরি করতে সাহায্য করে। আপনি একটি ফর্ম ক্লাস তৈরি করেন, যেখানে ইনপ

ুট ফিল্ড এবং ভ্যালিডেশন রুলস থাকে। তারপর সেই ফর্মটি কন্ট্রোলারে প্রসেস করে ভিউতে রেন্ডার করা হয়।

Content added By
Promotion

Are you sure to start over?

Loading...