2013-09-10 4 views
1

Я пытаюсь выполнить проверку с помощью торта 2.3.8 при загрузке файла, чтобы убедиться, что могут быть загружены только PDF-файлы. Я слабо опишу это из урока this.Проверка CakePHP для загрузки файла

Моя форма отображает звездочку рядом со словом, и когда я удаляю валидацию с моей модели, звездочка уходит. Я предполагаю, что это означает, что он «видит» вход для проверки, но я просто не могу понять, почему даже пользовательская проверка не запускается.

Вот форма

echo $this->Form->create('Upload', array('type' => 'file')); 
echo $this->Form->input('file_upload', array('type' => 'file')); 
echo $this->Form->input('file_title'); 
echo $this->Form->end(__('Upload File!', true)); 

Вот код в моей публикации модели

public function checkUpload(){ 
    echo "test"; //check to see if it reaches this...not displaying 
    return false; //the error message should be set just for testing, it's not displaying though 
} 


public $validate = array(
    'file_upload' => array(
     'extension' => array(
      'rule' => array('extension', array('pdf')), 
      'message' => 'Only pdf files', 
     ), 
     'upload-file' => array(
       'rule' => array('checkUpload'), 
       'message' => 'Error uploading file' 
     ) 
    ) 
); 

ответ

0

если вы пытаетесь отлаживать СТГ в торт, всегда используйте debug(sth) // sth could be variable could be string could be anything, cuz in Cake debug means

echo "<pre>"; 
print_r(sth); 
echo "</pre>";` 

это уже отформатированный очень хорошо.
затем после этого вы должны положитьdie() иначе после echo sth он загрузит представление, поэтому вы не увидите его, даже если есть выход.

+0

что STH? Я пробовал именно это, и он говорит: «Использование неопределенной константы sth - предполагается« sth » – user2443591

+0

lol ... sth означает вещь, которую вы хотите отлаживать ... в этом случае вы можете выполнить отладку (« здесь »); – Geoffreyirl

+0

у вас есть эта ошибка означает, что вы ввели функцию checkUpload – Geoffreyirl

2

Вот мой ответ (хотя для cakephp 1.3):

В вашей model добавьте следующий validation к вашим $validate переменным.

$this->validate = array(... 

    // PDF File 
    'pdf_file' => array(
     'extension' => array(
      'rule' => array('extension', array('pdf')), 
      'message' => 'Only pdf files', 
     ), 
     'upload-file' => array(
      'rule' => array('uploadFile'), // Is a function below 
      'message' => 'Error uploading file' 
     ) 
    ) 

); // End $validate 


/** 
* Used when validating a file upload in CakePHP 
* 
* @param Array $check Passed from $validate to this function containing our filename 
* @return boolean True or False is passed or failed validation 
*/ 
public function uploadFile($check) 
{ 
    // Shift the array to easily acces $_POST 
    $uploadData = array_shift($check); 

    // Basic checks 
    if ($uploadData['size'] == 0 || $uploadData['error'] !== 0) 
    { 
     return false; 
    } 

    // Upload folder and path 
    $uploadFolder = 'files'. DS .'charitylogos'; 
    $fileName = time() . '.pdf'; 
    $uploadPath = $uploadFolder . DS . $fileName; 

    // Make the dir if does not exist 
    if(!file_exists($uploadFolder)){ mkdir($uploadFolder); } 

    // Finally move from tmp to final location 
    if (move_uploaded_file($uploadData['tmp_name'], $uploadPath)) 
    { 
     $this->set('logo', $fileName); 
     return true; 
    } 

    // Return false by default, should return true on success 
    return false; 
} 

Вы можете иметь для отображения сообщений Ошибка проверки самостоятельно, вы можете сделать это с помощью:

<!-- The classes are for twitter bootstrap 3 - replace with your own --> 
<?= $form->error('pdf_file', null, array('class' => 'text-danger help-block'));?> 
Смежные вопросы