将中间件添加到Slim的路线时会出现错误



我以Slim编写了此代码,它可以正常工作,但是当我添加中间件时,我会收到以下错误!!!无法弄清楚发生了什么事,可以帮我。

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

此中间件过滤不支持的文件类型

use SlimHttpRequest;
use SlimHttpResponse;
use ApiErrorList 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');

    });

您应该从

中删除'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);

纤细的中间件

最新更新