PHP: ¿Cómo cambiar el nombre de un archivo cargado con Zend_Form_Element_File?

Formar:
//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);
Controlador:
//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();
    }
}
Preguntas:

Cuando llamo$form->file->getFileName() devuelve la ruta completa, no solo el nombre del archivo. ¿Cómo puedo dar salida solo al nombre del archivo?

//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'];

¿Cómo puedo cambiar el nombre del archivo a algo que quiero? ¿Se puede hacer esto con laRename ¿filtrar? Ya estoy configurando el destino en el formulario, así que todo lo que quiero hacer es cambiar el nombre del archivo. Tal vez no debería establecer el destino en el formulario? O tal vez esto no se puede hacer con un filtro. Tal vez debería estar haciendo esto con una función de PHP? ¿Qué tengo que hacer?

//Answer: Use the rename filter:
$form->file->addFilter('Rename', 'new-file-name-goes-here.txt');
Solución final:

Esto es lo que terminé haciendo:

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)
    }
}

Respuestas a la pregunta(7)

Su respuesta a la pregunta