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