PHP: Как переименовать файл, загруженный с помощью Zend_Form_Element_File?

Форма:
//excerpt
$file = new Zend_Form_Element_File('file');
$file->setLabel('File to upload:')
    ->setRequired(true)
    ->addValidator('NotEmpty')
    ->addValidator('Count', false, 1)
    ->setDestination(APPLICATION_UPLOADS_DIR);
$this->addElement($file);
контроллер:
//excerpt
if ($form->isValid($request->getPost()) {
    $newFilename = 'foobar.txt';
    //how should I rename the file?
    //When should I rename the file? Before or after receiving?
    try {
        $form->file->receive();
        echo 'filename: '. $form->file->getFileName();
    }
}
Вопросы:

Когда я звоню$form->file->getFileName() он возвращает полный путь, а не только имя файла. Как я могу вывести только имя файла?

//Answer: First, get an array of the parts of the filename:
$pathparts = pathinfo($form->file->getFileName());
//then get the part that you want to use
$originalFilename = $pathparts['basename'];

Как я могу переименовать имя файла в то, что я хочу? Можно ли это сделать сRename фильтр? Я'Я уже устанавливаю пункт назначения в форме, поэтому все, что я хочу сделать, это изменить имя файла. Может быть, я не долженне установить пункт назначения в форме? Или, может быть, это можетне может быть сделано с фильтром. Может быть, я должен делать это с помощью функции PHP? Что я должен делать?

//Answer: Use the rename filter:
$form->file->addFilter('Rename', 'new-file-name-goes-here.txt');
Окончательное решение:

Это то, что я в итоге сделал:

public function foobarAction()
{
    //...etc...

    if (!$form->isValid($request->getPost())) {
        $this->view->form = $form;
        return;
    }

    //the following will rename the file (I'm setting the upload dir in the form)
    $originalFilename = pathinfo($form->file->getFileName());
    $newFilename = 'file-' . uniqid() . '.' . $originalFilename['extension'];
    $form->file->addFilter('Rename', $newFilename);

    try {
        $form->file->receive();
        //upload complete!
        $file = new Default_Model_File();
        $file->setDisplayFilename($originalFilename['basename'])
            ->setActualFilename($newFilename)
            ->setMimeType($form->file->getMimeType())
            ->setDescription($form->description->getValue());
        $file->save();
    } catch (Exception $e) {
        //error: file couldn't be received, or saved (one of the two)
    }
}

Ответы на вопрос(7)

Ваш ответ на вопрос