Forms cakephp formhelper:在编辑时从输入文件获取当前文件

Forms cakephp formhelper:在编辑时从输入文件获取当前文件,forms,cakephp,file-upload,edit,cakephp-3.x,Forms,Cakephp,File Upload,Edit,Cakephp 3.x,我有一个可以提交图像的表单,这不是我最初的代码,我正在继承它,我正在尝试解决这个问题 编辑此表单中的数据时,与其他输入相比,输入文件为空。所以保存实际上会将当前文件替换为数据库中的“数组” 我想能够保持当前的一个,如果它是不变的 表格编辑: <h1>Edit</h1> <?php echo $this->Form->create($template,['enctype' => 'multipart/form-data']); echo $this-

我有一个可以提交图像的表单,这不是我最初的代码,我正在继承它,我正在尝试解决这个问题

编辑此表单中的数据时,与其他输入相比,输入文件为空。所以保存实际上会将当前文件替换为数据库中的“数组”

我想能够保持当前的一个,如果它是不变的

表格编辑:

<h1>Edit</h1>
<?php
echo $this->Form->create($template,['enctype' => 'multipart/form-data']);
echo $this->Form->input('title');
echo $this->Form->input('works_id');                 
echo $this->Form->input('photo',['type' => 'file']);
echo $this->Form->input('text', ['rows' => '4']);
echo $this->Form->input('url');
echo $this->Form->button(__('Save'));
echo $this->Form->end();
?>
在我的数据库中,它保存在两个列上: file_dir和filename,因此如何在编辑表单中获取文件更让我困惑

编辑:添加TemplatesTable:

<?php
namespace App\Model\Table;

use Cake\ORM\Table;
use Cake\Validation\Validator;

class TemplatesTable extends Table
{
protected function _initializeSchema(\Cake\Database\Schema\Table $table){
    $table->columnType('photo', 'proffer.file');
    return $table;
}
public function initialize(array $config){
    $this->addBehavior('Timestamp');
    $this->addBehavior('Proffer.Proffer', [
        'photo' => [
            'root' => WWW_ROOT.'files',
            'dir' => 'photo_dir',
            'thumbnailSizes' => [
                'square' => ['w' => 200, 'h' => 200],
                'portrait' => ['w' => 100, 'h' => 300, 'crop' => true],
            ],
            'thumbnailMethod' => 'gd' // Options are Imagick, Gd or Gmagick
        ]
    ]);
    $this->belongsTo(
        'Works',
        [
            'foreignKey' => 'work_id',
        ]
    );
}
public function validationDefault(Validator $validator){
    $validator
        ->notEmpty('work_id')
        ->notEmpty('title');
    return $validator;
}
}

根据文档,
profer
行为可以处理开箱即用的空上传,您只需相应地配置字段的验证规则,以允许更新时字段为空:

如果希望用户在创建记录时提交文件,但是 不在更新时,您可以使用基本蛋糕配置它 规则

因此,现在您的用户无需在每次更新时上载文件 记录

因此,在您的情况下,这将是:

->requirePresence('photo', 'create')
->allowEmpty('photo', 'update')

您应该具有适当的逻辑,可以丢弃空文件上载数组字段。如果看不到处理文件上传的代码,很难给出进一步的建议。@ndm谢谢,我用找到的TemplatesTable模型编辑,我知道这会在上传时创建纵向和方形格式的缩略图。希望这对我寻找更多线索有所帮助
$validator
    ->requirePresence('image', 'create')
    ->allowEmpty('image', 'update');
->requirePresence('photo', 'create')
->allowEmpty('photo', 'update')