There are several ways of renaming files if you don’t want to use Zend_Form_Element component. However, the following is a ZF technique.Suppose you have a very basic form with a single file element:
Form.php
What you need to do is to override the isValid( .. ) method of your Form Object:
Form.php
If you don’t want to loose your other validators , don’t forget to call the parent isValid() method . As you can see, I used PHP’s pathinfo() method to parse the file path. (There should be another one in ZF ). I renamed it with a string of 10 random characters, and kept the extension as it was. Below is the method that you can use for the random file name :
Finally, in your controller, you basically check if the form is valid,
MyFormController.php
I hope it helps.
Form.php
class My_Form extends Zend_Form {
public function init() {
$element = new Zend_Form_Element_File('imagefile');
$element->setLabel('Upload an image:');
$element->setDestination($uploaddir);
/* file directory */
$element->addValidator('Count', false, 1);
$element->addValidator('Size', false, 202400);
$element->setRequired(false);
$element->addValidator('IsImage', false, 'jpeg,jpg,png,gif');
$this->addElement($element, 'imagefile');
}
}
Form.php
public function isValid($data) {
$oldname = pathinfo($this->imagefile->getFileName());
$newname = $this->getUniqueCode(10) . '.' . $oldname['extension'];
$this->imagefile->addFilter('Rename',$newname);
return parent::isValid($data);
}
function getUniqueCode($length = "") {
$code = md5(uniqid(rand(), true));
if ($length != "") return substr($code, 0, $length);
else return $code;
}
MyFormController.php
$request = $this->getRequest();
$form = new My_Form();
if ($request->isPost()) {
if ($form->isValid($request->getPost())) {
$formData = $form->getValues();
try { $form->imagefile->receive(); }
catch (Exception $e) { throw new Zend_Exception ('There is a problem with the file upload'); }
} }
0 评论:
Post a Comment