使用twig和Slim框架(版本2)上载文件-PHP

使用twig和Slim框架(版本2)上载文件-PHP,php,file-upload,twig,slim,userfrosting,Php,File Upload,Twig,Slim,Userfrosting,我使用的是UserFrosting用户管理系统,通过FormPost上传文件时遇到了一些问题,这就是我尝试的 这就是我的小树枝文件的外观。 <form name="eveniment" method="post" action="{{form_action}}" enctype="multipart/form-data"> ... <input type="file" class="form-control" name="poza" id="poza"> ..

我使用的是UserFrosting用户管理系统,通过FormPost上传文件时遇到了一些问题,这就是我尝试的

这就是我的小树枝文件的外观。

<form name="eveniment" method="post" action="{{form_action}}" enctype="multipart/form-data">
  ...
  <input type="file" class="form-control" name="poza" id="poza">
  ...
</form>`
路线

$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["poza"]["name"]);
$uploadOk = 1;
$imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);

// Check if image file is a actual image or fake image
$check = getimagesize($_FILES);
if($check !== false) {
    $ms->addMessage("success", "File is an image - " . $check["mime"] . ".");
    $uploadOk = 1;
} else {
    $ms->addMessage("danger", "File is not an image.");
    $uploadOk = 0;
}
$ms->addMessage("success", $target_file);
// Check if file already exists
if (file_exists($target_file)) {
    $ms->addMessage("danger", "Sorry, file already exists.");
    $uploadOk = 0;
}
// Check file size
if ($_FILES["poza"]["size"] > 500000) {
    $ms->addMessage("danger", "Sorry, your file is too large.");
    $uploadOk = 0;
}
// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 0) {
    $ms->addMessage("danger", "Sorry, your file was not uploaded.");
// if everything is ok, try to upload file
} else {
    if (move_uploaded_file($_FILES["poza"]["name"], $target_file)) {
        $ms->addMessage("success", "The file ". basename( $_FILES["poza"]["name"]). " has been uploaded.");
    } else {
        $ms->addMessage("danger",  "Sorry, there was an error uploading your file.");
    }
}
$app->post('/evenimente/?', function () use ($app) {
    $controller = new UF\EvenimentController($app);
    return $controller->createEveniment();
});
PHP配置

文件上传到

upload\u max\u文件大小128M

除此之外,其他所有输入都会成功过帐,但type=“file”的输入除外


我没有任何错误,我尝试了不同的方法,但没有成功。另外,如果我打印
$\u文件[“poza”][“name”]
,它将是空的。

此答案假设您使用的是UserFrosting,因为您在UserFrosting Gitter聊天中链接了此问题

UserFrosting包括CSRFGuard中间件,以确保所有POST请求都源自本地。您需要包括CSRF令牌,以确保中间件不会阻止POST请求

由于令牌已经在Twig全局变量中,最简单的方法是使用一个隐藏的表单字段,其中包含CSRF令牌:

<input type="hidden" name="{{csrf_key}}" value="{{csrf_token}}">

此答案假设您使用的是UserFrosting,因为您在UserFrosting Gitter聊天中链接了此问题

UserFrosting包括CSRFGuard中间件,以确保所有POST请求都源自本地。您需要包括CSRF令牌,以确保中间件不会阻止POST请求

由于令牌已经在Twig全局变量中,最简单的方法是使用一个隐藏的表单字段,其中包含CSRF令牌:

<input type="hidden" name="{{csrf_key}}" value="{{csrf_token}}">


您确定要将请求发送给控制器吗?从这个角度看,您的代码没有问题。开始一次对一个部件进行故障排除。通过上传文件开始发送到您的路线。@DavidePastore是的,我是,其他字段已成功发送。这是我的路线:$app->post('/evenimente/?',函数()使用($app){$controller=new UF\EvenimentController($app);返回$controller->createevenimente();})<代码>变量转储($\文件)
getimagesize($\u文件)
–这当然是胡说八道,您不能通过将完整的$\u文件数组传递到函数中来调用该函数。你确定你正在向你的控制器发送请求吗?你的代码没有问题,从这个角度看没有问题。开始一次对一个部件进行故障排除。通过上传文件开始发送到您的路线。@DavidePastore是的,我是,其他字段已成功发送。这是我的路线:$app->post('/evenimente/?',函数()使用($app){$controller=new UF\EvenimentController($app);返回$controller->createevenimente();})<代码>变量转储($\文件)
getimagesize($\u文件)
–这当然是胡说八道,您不能通过将完整的$\u文件数组传递到函数中来调用该函数。