Symfony1 在symfony 1中上载文件验证

Symfony1 在symfony 1中上载文件验证,symfony1,upload,Symfony1,Upload,我正在使用symfony1.0进行开发,我正在使用一个文件验证(validate/upload.yml),如下所示: methods: post: [logo_file] get: [logo_file] names: logo_file: required: Yes

我正在使用symfony1.0进行开发,我正在使用一个文件验证(validate/upload.yml),如下所示:

    methods:
              post:               [logo_file]
              get:                [logo_file]

    names:
              logo_file:
              required:         Yes
              required_msg:     Please select a file to upload 23008
              validators:       myFileValidator
               file:             true

    myFileValidator:
              class:              sfFileValidator
              param:
                    mime_types:       
                            - 'image/jpeg'
                            - 'image/png'
                            - 'image/gif'
                            - 'image/x-png'
                            - 'image/pjpeg'    
    mime_types_error: Only PNG, GIF and JPEG images files are allowed 23009
    max_size:         512000
    max_size_error:   Max size is 512Kb 23010
<?php
   define('SF_ROOT_DIR',    realpath(dirname(__FILE__).'/..'));
   define('SF_APP',         'backend');
   define('SF_ENVIRONMENT', 'prod');
    define('SF_DEBUG',       false);

   // symfony directories
      require_once(SF_ROOT_DIR.DIRECTORY_SEPARATOR.'apps'.DIRECTORY_SEPARATOR.SF_APP.DIRECTORY_SEPARATOR.'config'.DIRECTORY_SEPARATOR.'config.php');

     sfContext::getInstance();

 /********************************** Begin **********************************/


         $criteria = new Criteria();
           $listCompanyLogo = CompanyLogoPeer::doSelect($criteria);


         foreach($listCompanyLogo as $CompanyLogo)
      {
 if(!is_null($CompanyLogo))
       {


       $filename= $CompanyLogo->getFileName();
       $filepath=$CompanyLogo->getFilePath();
       $fileurl=$CompanyLogo->getFileUrl();



       $finalFileName=StringTool::stripText($filename);
       $finalFilePath=StringTool::cleanUrl($filename,$filepath);
       $finalFileUrl=StringTool::cleanUrl($filename,$fileurl);



       $CompanyLogo->setFileName($finalFileName);
       $CompanyLogo->setFilePath($finalFilePath);
       $CompanyLogo->setFileUrl($finalFileUrl);


       $CompanyLogo->save();

       echo ' the name of logo : '.$filename.' is modified by  ==============>'.$finalFileName.'<br>' ;
       exit();
       }

       }

         /********************************** End **********************************/
       ?>
到目前为止一切都很好,但我还想对图像的名称进行验证,我希望在数据库中进行笔划之前清除无效字符中的名称

编辑

当然不是这样,现在我正在使用函数,然后在DB中sving:

    public static function generateUniqueName($fileName, $fileExtension)
{
    // Create a name 
    $fileUniqueSuffix=PublicIdGeneratorPeer::getPublicIdForTable(self::UNIQUE_FILE_ID);
    $finalFileName = $fileName.'-'.$fileUniqueSuffix.$fileExtension;

   //here I want to replace or remove invalid character from  $filename 

    return $finalFileName;
}
编辑-2

所以现在我有很多图像的名称存储在数据库中,带有invlaid字符,所以我希望创建一个脚本或一种方法,以feald“image_name”的形式传输所有数据,并直接更改数据库中的所有无效字符,我的第一个想法是使用“task”?!有什么想法吗

编辑-3

因此,现在我将我的批次如下所示:

    methods:
              post:               [logo_file]
              get:                [logo_file]

    names:
              logo_file:
              required:         Yes
              required_msg:     Please select a file to upload 23008
              validators:       myFileValidator
               file:             true

    myFileValidator:
              class:              sfFileValidator
              param:
                    mime_types:       
                            - 'image/jpeg'
                            - 'image/png'
                            - 'image/gif'
                            - 'image/x-png'
                            - 'image/pjpeg'    
    mime_types_error: Only PNG, GIF and JPEG images files are allowed 23009
    max_size:         512000
    max_size_error:   Max size is 512Kb 23010
<?php
   define('SF_ROOT_DIR',    realpath(dirname(__FILE__).'/..'));
   define('SF_APP',         'backend');
   define('SF_ENVIRONMENT', 'prod');
    define('SF_DEBUG',       false);

   // symfony directories
      require_once(SF_ROOT_DIR.DIRECTORY_SEPARATOR.'apps'.DIRECTORY_SEPARATOR.SF_APP.DIRECTORY_SEPARATOR.'config'.DIRECTORY_SEPARATOR.'config.php');

     sfContext::getInstance();

 /********************************** Begin **********************************/


         $criteria = new Criteria();
           $listCompanyLogo = CompanyLogoPeer::doSelect($criteria);


         foreach($listCompanyLogo as $CompanyLogo)
      {
 if(!is_null($CompanyLogo))
       {


       $filename= $CompanyLogo->getFileName();
       $filepath=$CompanyLogo->getFilePath();
       $fileurl=$CompanyLogo->getFileUrl();



       $finalFileName=StringTool::stripText($filename);
       $finalFilePath=StringTool::cleanUrl($filename,$filepath);
       $finalFileUrl=StringTool::cleanUrl($filename,$fileurl);



       $CompanyLogo->setFileName($finalFileName);
       $CompanyLogo->setFilePath($finalFilePath);
       $CompanyLogo->setFileUrl($finalFileUrl);


       $CompanyLogo->save();

       echo ' the name of logo : '.$filename.' is modified by  ==============>'.$finalFileName.'<br>' ;
       exit();
       }

       }

         /********************************** End **********************************/
       ?>

如果您看到任何错误或优化,请告诉我…

您可以使用striptext方法在
generateUniqueName
函数中清理文件名。例如,在以下情况中使用的:

编辑

对于第二个请求,您应该创建一个任务。事实上,这是一项任务,但在sf1.0中称为批处理。看见基本上:

  • 你把你所有的图像都拿出来
  • 你清理所有的名字
  • 您可以使用新名称重命名磁盘上的所有映像
编辑2:

如果您对utf8有问题,您应该使用中的
urlize

然后使用:

$finalFileName    = Doctrine_Inflector::urlize($fileName).'-'.$fileUniqueSuffix.$fileExtension;

你确定你的yml缩进了吗?@j0k我编辑了我的第一条消息,你看到了我的答案……那么你为什么不在
generateUniqueName
中进行清理呢?1.0版现在已经很旧了——我建议你升级到1.3版,而且更改非常小(除了表单更改,这是巨大的,但直到1.4版才是强制性的).我知道halfer,这只是一个简单的更正,我们将用symfony 2.1重新构建它。@jOk我做了一个新的编辑,请你可以看到我的第一条消息好的,我在数据库和目录中有一个文件名,名为“Aranès.jpg”,但当我从数据库中获取名称并将其重命名后,我有了“Aranès.jpg”├那么重命名retrun flaseI我认为你应该重命名文件名而不是整个路径。是的,我知道我对整个路径这么做,为了解释我给你的只是文件名,它的编码UTF8有问题,因为当我删除“è”时,它很好没有问题,你只需要包含这个孤独的类。它不使用任何来自条令的东西,除了名称(顺便说一句,您可以重命名名称)
public static function generateUniqueName($fileName, $fileExtension)
{
    // Create a name 
    $fileUniqueSuffix = PublicIdGeneratorPeer::getPublicIdForTable(self::UNIQUE_FILE_ID);
    $finalFileName    = myTools::stripText($fileName).'-'.$fileUniqueSuffix.$fileExtension;

    return $finalFileName;
}
$finalFileName    = Doctrine_Inflector::urlize($fileName).'-'.$fileUniqueSuffix.$fileExtension;