2017-01-23 3 views
2

Я использую Respect Validation, чтобы попытаться проверить загрузку файла. Проблема, с которой я столкнулась, заключается в том, что валидация всегда терпит неудачу, даже если правильно загружено правильное изображение.

Вот мой код:

public function updateProfilePicture(Request $request, Response $response, $args = []) { 

    $files = $request->getUploadedFiles(); 

    if(empty($files['image'])) { 
     throw new AppException('Invalid image'); 
    } 

    // Validate image 
    $validator = v::key('image', v::image()); 

    try { 
     $validator->assert($files); 
     // $validator->assert($_FILES); 
    } catch(NestedValidationException $e) { 
     throw new AppException($e->getMessage()); 
    } 
} 

Ошибка я получаю:

{ 
    "status": false, 
    "data": null, 
    "message": "All of the required rules must pass for { \"image\": { \"name\": \"twitter.png\", \"type\": \"image/png\", \"tmp_name\": \"/private/var/folders/ry/kgy3g6v96s71jg3htn6r5rt80000gn/T/php7x3P6w\", \"error\": 0, \"size\": 210955 } }" 
} 

Как было предложено в комментариях, я попытался с помощью $validator->assert($files['image']);. Это не работает и дает следующее сообщение об ошибке:

{ 
    "status": false, 
    "data": null, 
    "message": "All of the required rules must pass for `[object] (Slim\\Http\\UploadedFile: { \"file\": \"/private/var/folders/ry/kgy3g6v96s71jg3htn6r5rt80000gn/T/phppJn1Uw\" })`" 
} 

Переменная $files содержит:

array(1) { 
    ["image"]=> 
    object(Slim\Http\UploadedFile)#120 (8) { 
    ["file"]=> 
    string(66) "/private/var/folders/ry/kgy3g6v96s71jg3htn6r5rt80000gn/T/php8sPpkD" 
    ["name":protected]=> 
    string(11) "twitter.png" 
    ["type":protected]=> 
    string(9) "image/png" 
    ["size":protected]=> 
    int(210955) 
    ["error":protected]=> 
    int(0) 
    ["sapi":protected]=> 
    bool(true) 
    ["stream":protected]=> 
    NULL 
    ["moved":protected]=> 
    bool(false) 
    } 
} 

И $_FILES содержит:

array(1) { 
    ["image"]=> 
    array(5) { 
    ["name"]=> 
    string(11) "twitter.png" 
    ["type"]=> 
    string(9) "image/png" 
    ["tmp_name"]=> 
    string(66) "/private/var/folders/ry/kgy3g6v96s71jg3htn6r5rt80000gn/T/phpm0Gv35" 
    ["error"]=> 
    int(0) 
    ["size"]=> 
    int(210955) 
    } 
} 

Как было предложено в комментарии я попытался $validator->assert($_FILES['image']['tmp_name']); и получить следующую ошибку:

{ 
    "status": false, 
    "data": null, 
    "message": "All of the required rules must pass for \"/private/var/folders/ry/kgy3g6v96s71jg3htn6r5rt80000gn/T/php8E5apg\"" 
} 

Я пытался Google узнать, как это делают другие, но не смог найти ничего полезного.

+0

Вы пробовали это? '$ validator-> assert ($ files ['image']);' – deoliveiralucas

+0

@LucasdeOliveira пробовал это безрезультатно. Я обновил свой ответ, чтобы показать ошибку. – BugHunterUK

+0

Что возвращает эта переменная '$ files'? Если это то же самое, что возвращает '$ _FILES', вы можете попытаться сделать это:' $ validator-> assert ($ files ['image'] ['tmp_name']); ' – deoliveiralucas

ответ

1

Попробуйте сделать это:

var_dump(v::image()->validate($_FILES['image']['tmp_name‌​']‌​));