Переменная не доступна в определенной функции? Fat-Free-Framework

Я пишу переменную сеанса успешно. Я получаю переменную сеанса успешно. Я даже могу определить его вручную, но он никогда не передается в часть имени функции ($ fileBaseName, $ formFieldName) ниже.

Любая помощь с благодарностью. Спасибо!

$uuid = $f3->get('SESSION.uuid'); // get session uuid

$f3->set('UPLOADS', $f3->UPLOAD_IMAGES); // set upload dir

$files = $web->receive(
function($file,$formFieldName) {

if($file['size'] > (5 * 1024 * 1024)) // if bigger than 5 MB
return false; // this file is not valid, return false will skip moving it

$allowedFile = false; // do not trust mime type until proven trust worthy
for ($i=0; $i < count($allowedTypes); $i++) {
if ($file['type'] == $allowedTypes[$i]) {
$allowedFile = true; // trusted type found!
}
}

// return true if it the file meets requirements
($allowedFile ? true : false);
},

true, //overwrite

function($fileBaseName, $formFieldName) {

$pathparts = pathinfo($fileBaseName);

if ($pathparts['extension']) {

// custom file name (uuid) + ext
return ($uuid . '.' . strtolower($pathparts['extension']));

} else {
return $uuid; // custom file name (md5)
}
}
);

1

Решение

Две функции, которые вы передаете $web->receive() являются укупорочные. В PHP замыкания не могут видеть переменные, объявленные в области, из которой они объявлены. Чтобы сделать такие переменные видимыми, вы можете использовать use ключевое слово:

$uuid = $f3->get('SESSION.uuid'); // get session uuid

$f3->set('UPLOADS', $f3->UPLOAD_IMAGES); // set upload dir

$files = $web->receive(
function($file,$formFieldName) {
//...
},

true, //overwrite

function($fileBaseName, $formFieldName) use ($uuid) {
//...
}
);

Это должно сделать $ uuid видимым внутри этой второй функции.

2

Другие решения

PHP переменная область

Поскольку переменная $uuid не определено, это, вероятно, выходит за рамки.

Вам нужно передать переменную в вашу функцию, объявить ее как глобальную или установить свойство класса (если это не класс). Если он установлен в вашем сеансе, вы можете вызывать его напрямую, не назначая его переменной в любом месте вашего сеанса.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector