Получение ошибки при добавлении промежуточного ПО в маршрут в Slim - PullRequest
0 голосов
/ 28 февраля 2019

Я написал этот код на Slim, и он отлично работает, но когда я добавляю промежуточное ПО, я получаю следующую ошибку !!!Не могу понять, что происходит, может кто-нибудь, пожалуйста, помогите мне.

PHP Catchable fatal error:  Argument 3 passed to fileFilter() must be callable, array given FILENAME in line 90

Это промежуточное ПО фильтрует неподдерживаемые типы файлов

use Slim\Http\Request;
use Slim\Http\Response;
use Api\ErrorList as ErrorList;

function fileFilter(Request $request, Response $response, callable $next){
        $allowedFiles = ['image/jpeg', 'image/png', 'application/pdf'];
        $files = $request->getUploadedFiles();
        $flattened =array_flatten($files);

        foreach ($flattened as $key=> $newFile){
            $newFileType = $newFile->getClientMediaType();

            if(!in_array($newFileType, $allowedFiles)) {
                return ResponseHelper::createfailureResponse($response, HTTPStatusCodes::BAD_REQUEST, ErrorList::UNSUPPORTED_FILE_TYPE);
            }

        }
        return $next($request, $response); // line 90
    }

И здесь я добавляю промежуточное ПО в свой маршрут.

 $app->group('/test/api/v1', function () {
        // other routes here
        $this->post('/resume/edit','fileFilter', ResumeController::class. ':edit')->setName('Resume.edit');


    });

1 Ответ

0 голосов
/ 04 марта 2019

Вы должны удалить 'fileFilter' из

$this->post('/resume/edit', ...

и изменить его на что-то вроде

$this->post(...)->add((Request $request, Response $response, callable $next){
    $allowedFiles = ['image/jpeg', 'image/png', 'application/pdf'];
    $files = $request->getUploadedFiles();
    $flattened =array_flatten($files);

    foreach ($flattened as $key=> $newFile){
        $newFileType = $newFile->getClientMediaType();

        if(!in_array($newFileType, $allowedFiles)) {
            return ResponseHelper::createfailureResponse($response, HTTPStatusCodes::BAD_REQUEST, ErrorList::UNSUPPORTED_FILE_TYPE);
        }

    }
    return $next($request, $response); // line 90
});

или как вызываемый класс

class MyMiddleware
{
    public function __invoke(Request $request, Response $response, callable $next){
        $allowedFiles = ['image/jpeg', 'image/png', 'application/pdf'];
        $files = $request->getUploadedFiles();
        $flattened =array_flatten($files);

        foreach ($flattened as $key=> $newFile){
            $newFileType = $newFile->getClientMediaType();

            if(!in_array($newFileType, $allowedFiles)) {
                return ResponseHelper::createfailureResponse($response, HTTPStatusCodes::BAD_REQUEST, ErrorList::UNSUPPORTED_FILE_TYPE);
           }

        }
        return $next($request, $response); // line 90
    }
}

и в маршруте

$this->post(...)->add(MyMiddleware::class);

Тонкое промежуточное ПО

...