التحقق من تحميل الملف فقط في السجل ، لا تحرير

StackOverflow https://stackoverflow.com/questions/3842591

  •  27-09-2019
  •  | 
  •  

سؤال

لدي نموذج يسمح بتحميل الملف وأستخدم التحقق من صحة البيانات للتحقق من نوع الملف الذي هو جيد. ما أريد القيام به هو السماح لهم بعد ذلك بتحرير هذا السجل نفسه ولكن لا يلزم تحميل ملف في ذلك الوقت.

قاعدة التحقق الخاصة بي هي كما يلي:

    'header_pic' => array(
        'extension' => array(
            'rule' => array('extension', array('jpeg', 'jpg', 'gif', 'png')),
            'message' => 'You must supply a GIF, PNG, or JPG file.',
        )
    )

لكن هذه القاعدة تتطلب ملفًا. لقد وجدت المعلمة "ON" ويمكنني إضافتها إلى هذه القاعدة ، لكنها ستتحقق فقط من الملفات على الإنشاء. ليس على التحرير.

لقد جربت هذا لكنه لم ينجح:

   'header_pic' => array(
        'extension' => array(
            'rule' => array('extension', array('jpeg', 'jpg', 'gif', 'png')),
            'required' => false,
            'allowEmpty' => true,
            'message' => 'You must supply a GIF, PNG, or JPG file.',
        ),
        'notEmpty' => array(
            'rule' => array( 'notEmpty'),
            'on' => 'create',
            'message' => 'You must supply a file.',
        ),
    )

ماذا ينقصني؟ (شكرا مقدما!!)

هل كانت مفيدة؟

المحلول 2

اكتشفتها. (بفضل Omabena و RSK على اقتراحاتهم.) اكتشفت أنه يمكنني فقط إعداد قاعدتين للتحقق واستخدام واحدة للإضافة والآخر للإنشاء. يعمل بشكل نظيف جدا.

   'header_pic' => array(
        'extension' => array(
            'rule' => array('extension', array('jpeg', 'jpg', 'gif', 'png')),
            'message' => 'You must supply a GIF, PNG, or JPG file.',
            'required' => false,
            'on' => 'add'
        ),
        'extension2' => array(
            'rule' => array('extension', array('jpeg', 'jpg', 'gif', 'png')),
            'message' => 'You must supply a GIF, PNG, or JPG file.',
            'required' => true,
            'on' => 'create'
        ),
    )

نصائح أخرى

var $validate = array(
        'imageupload' => array(
            'checksizeedit' => array(
                'rule' => array('checkSize',false),
                'message' => 'Invalid File size',
                'on' => 'update'
            ),
            'checktypeedit' =>array(
                'rule' => array('checkType',false),
                'message' => 'Invalid File type',
                'on' => 'update'
            ),
            'checkuploadedit' =>array(
                'rule' => array('checkUpload', false),
                'message' => 'Invalid file',
                'on' => 'update'
            ),
            'checksize' => array(
                'rule' => array('checkSize',true),
                'message' => 'Invalid File size',
                'on' => 'create'
            ),
            'checktype' =>array(
                'rule' => array('checkType',true),
                'message' => 'Invalid File type',
                'on' => 'create'
            ),
            'checkupload' =>array(
                'rule' => array('checkUpload', true),
                'message' => 'Invalid file',
                'on' => 'create'
            ),
        )
    );






function checkUpload($data, $required = false){
        $data = array_shift($data);
        if(!$required && $data['error'] == 4){
            return true;
        }
        //debug($data);
        if($required && $data['error'] !== 0){
            return false;
        }
        if($data['size'] == 0){
            return false;
        }
        return true;

        //if($required and $data)
    }

    function checkType($data, $required = false,$allowedMime = null){
        $data = array_shift($data);
        if(!$required && $data['error'] == 4){
            return true;
        }
        if(empty($allowedMime)){
            $allowedMime = array('image/gif','image/jpeg','image/pjpeg','image/png');
        }

        if(!in_array($data['type'], $allowedMime)){
            return false;
        }
        return true;
    }

    function checkSize($data, $required = false){
        $data = array_shift($data);
        if(!$required && $data['error'] == 4){
            return true;
        }
        if($data['size'] == 0||$data['size']/1024 > 2050){
            return false;
        }
        return true;
    }

لقد استخدمت هذا لنفسه وستحاول بنجاح. وقم بالتغييرات إذا كنت بحاجة. كل ما هو أفضل

لقد واجهت نفس المشكلة ، وحالتي ليست جيدة حقًا ولكنها نجحت بالنسبة لي ، ما فعلته هو السماح لـ empty => صحيح. وفي وظيفة التحرير على وحدة التحكم ، قمت بتمرير بيانات تلك الصورة ، إلى صفيف البيانات $ this-> ، شيء من هذا القبيل ، لذلك عندما تذهب إلى النموذج ، لديك بالفعل الحقل "صورة" مع بعض البيانات ، و ليس عليك تحميل الصورة مرة أخرى ، أو تعديلها.

إذا لم يكن الأمر واضحًا ، فأخبرني فقط وسأحاول كسره.

أتمنى أن يناسبك

function admin_edit($id = null) {
        if (!$id && empty($this->data)) {
                $this->Session->setFlash(__('Invalid category', true));
                $this->redirect(array('action' => 'index'));
        }
        if (!empty($this->data)) {

            if(!empty($this->data['Category']['image']['name']))
            {
                $image_name = $this->Picture->upload_image_and_thumbnail($this->data,"image",570,70,"categories",true,"Category");
                $this->data['Category']['image'] =  $image_name;
            }
            else{
                $image_name = $this->Category->find('first',array(
                   'conditions'=> array(
                       'Category.id' => $this->data['Category']['id']
                   ),
                    'fields' => array(
                        'Category.image'
                    )
                ));
                $this->data['Category']['image'] = $image_name['Category']['image'];
            }


                if ($this->Category->save($this->data)) {
                        $this->Session->setFlash(__('The category has been saved', true));
                        $this->redirect(array('action' => 'index'));
                } else {

                        $this->Session->setFlash(__('The category could not be saved. Please, try again.', true));
                }
        }
        if (empty($this->data)) {
                $this->data = $this->Category->read(null, $id);
        }

}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top