Multiple ফাইল আপলোড এবং Validation

ফাইল আপলোড এবং ডাউনলোড - কেকপিএইচপি (CakePHP) - Web Development

258

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


Multiple ফাইল আপলোড করা

CakePHP তে একাধিক ফাইল আপলোড করার জন্য আপনি request অবজেক্টের মাধ্যমে ফাইলগুলো গ্রহণ করবেন এবং ফাইল আপলোডের জন্য FileValidator ব্যবহার করবেন।

১. ফর্মে Multiple ফাইল আপলোড ফিল্ড তৈরি করা

প্রথমে, ভিউ ফাইলে ফাইল আপলোডের জন্য একটি ফর্ম ফিল্ড তৈরি করতে হবে, যেখানে ইউজার একাধিক ফাইল সিলেক্ট করতে পারবে। নিচে add.php ফাইলের একটি উদাহরণ দেয়া হলো:

// templates/Articles/add.php

<h1>Add New Article</h1>

<?php
echo $this->Form->create($article, ['type' => 'file']); // ফাইল টাইপ ফর্ম তৈরি
echo $this->Form->control('title');
echo $this->Form->control('body');
echo $this->Form->control('files._ids', [
    'type' => 'file',
    'multiple' => 'multiple', // Multiple ফাইল সিলেক্ট করার জন্য
    'label' => 'Upload Files'
]);
echo $this->Form->button(__('Save Article'));
echo $this->Form->end();
?>

এখানে:

  • multiple অ্যাট্রিবিউটটি ফর্মের ইনপুট ফিল্ডে যোগ করা হয়েছে, যাতে ইউজার একাধিক ফাইল সিলেক্ট করতে পারেন।
  • ফাইল আপলোডের জন্য type => 'file' ব্যবহার করা হয়েছে।

২. কন্ট্রোলারে ফাইল আপলোড প্রক্রিয়া

কন্ট্রোলারে ফাইল আপলোড করার জন্য, আপনি ফাইলের ডেটা গ্রহণ করবেন এবং সেগুলি সংরক্ষণ করবেন। ফাইলগুলি সাধারণত $_FILES এর মাধ্যমে অ্যাক্সেস করা যায়, তবে CakePHP তার নিজস্ব ফাংশনালিটি প্রদান করে। নিচে add() অ্যাকশনটির একটি উদাহরণ দেয়া হলো:

// src/Controller/ArticlesController.php

public function add()
{
    $article = $this->Articles->newEmptyEntity(); // নতুন একটি article অবজেক্ট তৈরি
    if ($this->request->is('post')) {
        // ফাইল ডেটা গ্রহণ করা
        $files = $this->request->getData('files');
        
        // ফাইল আপলোড প্রক্রিয়া
        if (!empty($files)) {
            $uploadedFiles = [];
            foreach ($files['tmp_name'] as $index => $tmpName) {
                $fileName = $files['name'][$index];
                $fileTmpPath = $files['tmp_name'][$index];
                $destination = WWW_ROOT . 'files' . DS . $fileName;
                
                // ফাইল আপলোড করা
                if (move_uploaded_file($fileTmpPath, $destination)) {
                    $uploadedFiles[] = $fileName;
                }
            }
            // আপলোডকৃত ফাইলগুলির নাম ডাটাবেসে সংরক্ষণ করা (যদি প্রয়োজন হয়)
            $article->files = json_encode($uploadedFiles);
        }
        
        $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']);
        }
        $this->Flash->error(__('Unable to add your article.'));
    }
    $this->set('article', $article); // ভিউতে article ডেটা পাঠানো
}

এখানে:

  • ফাইলগুলো $_FILES থেকে নেয়া হয় এবং সেগুলোর টেম্পোরারি ফাইল পাথ ও ফাইল নাম ব্যবহার করে ডেস্টিনেশন ফোল্ডারে স্থানান্তর করা হয়।
  • ফাইলগুলো move_uploaded_file() ফাংশনটি ব্যবহার করে আপলোড করা হয়।
  • সফল হলে, ফাইলের নামগুলি ডাটাবেসে JSON ফরম্যাটে সংরক্ষণ করা হয় (এটি ডাটাবেসে ফাইলের নাম বা লিঙ্ক সংরক্ষণ করতে সহায়তা করে)।

ফাইল আপলোডের Validation

CakePHP তে ফাইল আপলোডের জন্য FileValidator ব্যবহার করে বিভিন্ন ধরনের যাচাই করা যায়। আপনি ফাইলের সাইজ, এক্সটেনশন, এবং টাইপ যাচাই করতে পারেন।

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

আপনি ArticlesTable.php ফাইলে ফাইলের জন্য যাচাইয়ের নিয়ম যোগ করতে পারেন। নিচে একটি উদাহরণ দেয়া হলো:

// src/Model/Table/ArticlesTable.php

use Cake\Validation\Validator;

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.');

    // ফাইল যাচাইয়ের নিয়ম
    $validator
        ->add('files', 'fileExtension', [
            'rule' => ['mimeType', ['image/png', 'image/jpeg', 'application/pdf']], // শুধুমাত্র নির্দিষ্ট MIME টাইপ অনুমোদিত
            'message' => 'Only PNG, JPEG, or PDF files are allowed.'
        ])
        ->add('files', 'fileSize', [
            'rule' => ['fileSize', '<=', '2MB'], // ফাইল সাইজ ২MB এর বেশি হতে পারবে না
            'message' => 'File size should be less than 2MB.'
        ])
        ->allowEmptyFile('files'); // ফাইল না থাকলে ত্রুটি হবে না

    return $validator;
}

এখানে:

  • mimeType: ফাইলের MIME টাইপ যাচাই করা হয়েছে। এখানে শুধুমাত্র PNG, JPEG, এবং PDF ফাইল অনুমোদিত।
  • fileSize: ফাইলের সাইজ ২MB এর কম হতে হবে।
  • allowEmptyFile(): ফাইল না থাকলেও ত্রুটি হবে না, তবে যদি ফাইল আপলোড করা হয়, তা যাচাই করা হবে।

২. ফাইলের Validation ত্রুটি দেখানো

যদি ফাইলের কোনো ত্রুটি ঘটে, তা ভিউতে দেখানোর জন্য নিচের কোড ব্যবহার করা যেতে পারে:

// templates/Articles/add.php

<h1>Add New Article</h1>

<?php
echo $this->Form->create($article, ['type' => 'file']);
echo $this->Form->control('title');
echo $this->Form->control('body');
echo $this->Form->control('files._ids', [
    'type' => 'file',
    'multiple' => 'multiple',
    'label' => 'Upload Files'
]);

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

echo $this->Form->button(__('Save Article'));
echo $this->Form->end();
?>

এখানে:

  • getErrors() ব্যবহার করে ফাইল আপলোডে যেকোনো ত্রুটি প্রদর্শন করা হয়েছে।

CakePHP তে Multiple ফাইল আপলোড এবং ফাইলের Validation খুবই সহজ এবং কার্যকরী। ফাইল আপলোড করতে আপনি move_uploaded_file() ফাংশন ব্যবহার করতে পারেন এবং ফাইলের ধরন, সাইজ এবং MIME টাইপ যাচাই করতে FileValidator ব্যবহার করতে পারেন। এই পদ্ধতিটি নিরাপদ এবং সহজ, যা ফাইল আপলোড এবং যাচাইয়ের জন্য CakePHP তে ব্যবহৃত হয়।

Content added By
Promotion

Are you sure to start over?

Loading...