Codeigniter扩展Form_validation不适用于回调函数

时间:2016-07-14 04:08:49

标签: php codeigniter

如果我输入MY_Form_validation文件,我就无法运行回调函数...

我现在就跑了。

我的控制器:

function article_new()
{   
    //Variable de configuration
    $allowed_types = 'jpg|jpeg|png';
    $max_size     ='2048000';// 2 Mo
    $max_filename  = '';

    $this->form_validation->set_rules('image','Image','callback_handle_upload['.$allowed_types.','.$max_size.','.$max_filename.']');

    if($this->form_validation->run() == FALSE)
    {
      --CODE--

我在同一控制器中的回调函数:

function handle_upload($image,$param)
{       
    if(isset($_FILES['image']) && !empty($_FILES['image']['name']))
    {
        // PARAMETRE
        $file = $_FILES['image'];
        $filename = $file['name'];
        $param = preg_split('/,/', $param);

        $allowed_types = $param[0];
        $max_size = $param[1];
        $max_filename = $param[2];

        $validType = false;
        $validWeight = false;
        $validLongName = false;

        // LONGUEUR NOM IMAGE
        if(!empty($max_filename)){
            if(strlen($filename) > $max_filename)
            {
                $this->form_validation->set_message('handle_upload', 'Le nom de l\'image ne doit pas depasser '.$max_filename.' caracteres');
                return false;
            }
            else{
                $validLongName = true;
            }
        }
        else{
            $validLongName = true;
        }

        // EXTENSION VALIDE OU PAS 
        $extension = end((explode(".",$filename)));
        $extension_config = array_map('trim',explode(" ",$allowed_types));
        if(!empty($allowed_types)){
            if(in_array($extension, $extension_config)){
                $validType = true;
            }
            else{
                $this->form_validation->set_message('handle_upload', "Ce type de fichier n'est pas autorisé");
                return false;
            }
        }
        else{
            $validType = true;
        }

        // POIDS VALID OU PAS
        if(!empty($max_size)){
            if($file['size'] > $max_size)
            {
                $this->form_validation->set_message('handle_upload', "L'image est trop lourde 2 Mo maximum");
                return false;
            }
            else
            {   
                $validWeight = true;
            }
        }
        else{
            $validWeight = true;
        }

        if($validLongName == true && $validType == true && $validWeight == true)
        {
            return true;
        }
    }
    else
    {
        $exist_cover = $this->blog_model->get_cover();
        if($exist_cover == NULL){
            // throw an error because nothing was uploaded
            $this->form_validation->set_message('handle_upload', "Vous devez uploader une image");
            return false;
        }
        else{
            // Il existe une image dans bdd donc je fais un edit donc pas obliger de poste une image
            return true;
        }
    }
}

但是如果我想将我的回调函数放在MY_Form_validation文件中,它就不起作用...... 我在我的控制器中为我的article_new函数执行此操作(删除回调):

$this->form_validation->set_rules('image','Image','handle_upload['.$allowed_types.','.$max_size.','.$max_filename.']')

我的MY_Form_validation文件:

class MY_Form_validation extends CI_Form_validation{

    function __construct($config = array()){
          parent::__construct($config);
     }


    function handle_upload ...

1 个答案:

答案 0 :(得分:0)

如果您使用自己的函数handle_upload扩展Form_validation,则无需编写"回调_" - 只是handle_upload

使用callback_your_method你需要在控制器中写入方法" your_method"

或者更好的使用下划线写方法,如_handle_upload,因此在验证规则中它将是" callback__handle_upload" - 这种方法不会直接从浏览器访问

祝你好运!:)

P.S。 MY_Form_validation类必须在库中