Я включил код наблюдателя в свой пользовательский модуль для события «customer_save_before». Он срабатывает, когда клиент отправляет свои данные в Magento, в области управления учетной записью. Он выполняет скрипт, который должен перехватывать массив $_FILES[...] и использовать Varien_File_Uploader для его сохранения в базе данных.
Я добавил новое поле в .../template/customer/form/edit.phtml
<input type="file" name="logo" id="logo" title="<?php echo $this->__('Logo') ?>" class="input-file" />
Это мой код Observer.php, который выполняется на «customer_save_before»:
class Walder_Logoupload_Model_Observer extends Mage_Core_Model_Abstract {
public function customer_save_before($observer) {
// Test code START
echo "<pre>"; print_r($_FILES);
$tempexists = file_exists($_FILES['logo']['tmp_name'])?'exists':'doesnt exist';
echo "logo.tmp_name file: ".$tempexists;
exit;
// Test code END
if(isset($_FILES['logo']['name'])) {
try {
$uploader = new Varien_File_Uploader('logo');
$uploader->setAllowedExtensions(array('jpg','jpeg','gif','png'));
$uploader->setAllowRenameFiles(false);
$uploader->setFilesDispersion(false);
$path = Mage::getBaseDir('media') . DS .'catalog'.DS.'customer'.DS.'logo';
$newName = time() . $_FILES['logo']['name'];
$uploader->save($path, $newName);
$customer->setLogo($newName);
}catch(Exception $e) {
echo "Exception: ".$e; exit;
}
}
}
}
После загрузки файла с включенным тестовым кодом я получаю массив, содержащий информацию о файле вместе с путем «tmp_name» и сообщением о том, что временный файл не существует:
[logo] => Array
(
[name] => sample-logo.png
[type] => image/png
[tmp_name] => /home/www/mag59212/tmp/phpbCoax5
[error] => 0
[size] => 107564
)
logo.tmp_name file: doesnt exist
С закомментированным тестовым кодом я получаю это сообщение об ошибке исключения:
exception 'Exception' with message 'File was not uploaded.'
in /home/www/mag59212/html/magento-de/lib/Varien/File/Uploader.php:153
Что означает то же самое, файл $_FILES['tmp_name'] не существует. В результате файл не сохраняется на сервере.
Когда я запускаю этот код наблюдателя в серверной части, я получаю те же сообщения для моего тестового кода (файл не существует), но файл все равно загружается.
Как исправить мой интерфейсный код для загрузки этого файла?