In my custom component/admin, in the item edit template I am trying to let the user upload a file.
The problem is that the file is not being passed in my save function. There is not even in the array as key. If I remove the enctype="multipart/form-data" from the form (which is wrong because no file will be passed) then the field comes with the filename as string.
[docfile] => my_file_to_upload.docx
but with the enctype="multipart/form-data" then, the result is :
2018-07-28T07:10:12+00:00 DEBUG 127.0.0.1 save_override_function_in_model Data $data : Array
(
[id] => 2
[title] => test
[alias] => test-test
[catid] => 0
[client_id] => 240
[published] => 0
[created] => 2018-07-20 06:07:43
[tags] =>
)
Here is the form in the tmpl/edit.php
<form action="<?php echo JRoute::_('index.php?option=com_comtest&layout=edit&id=' . (int) $this->item->id); ?>" method="post"
id="adminForm" enctype="multipart/form-data" class="form-validate">
<div class="form-horizontal">
<fieldset class="adminform">
<?php echo JHtml::_('bootstrap.startPane', 'myTab', array('active' => 'details')); ?>
<?php
echo JHtml::_('bootstrap.addPanel', 'myTab', 'details', empty($this->item->id) ?
JText::_('COM_COMTEST_NEW_CONTRACT', true) :
JText::sprintf('COM_COMTEST_EDIT_CONTRACT', $this->item->id, true));
?>
<div class="row-fluid">
<?php echo JLayoutHelper::render('joomla.edit.title_alias', $this); ?>
</div>
<div class="row-fluid">
<div class="span6">
<?php echo $this->form->renderField('catid'); ?>
<?php echo $this->form->renderField('client_id'); ?>
<?php echo $this->form->renderField('published'); ?>
<?php echo $this->form->renderField('created'); ?>
<?php echo $this->form->renderField('docfile'); ?>
</div>
</div>
<?php echo JHtml::_('bootstrap.endPanel'); ?>
<input type="hidden" name="task" value="" />
<?php echo JHtml::_('form.token'); ?>
<?php echo JHtml::_('bootstrap.endPane'); ?>
</fieldset>
</div>
</form>
The field in the xml models/forms/ is :
<field name="docfile" type="file" label="Select File" description="Select a doc/docx file to upload"
size="40" accept=".doc, .docx" />
and here is the overriden save function in the model
public function save($data = null, $key = null) {
JRequest::checkToken() or die('Invalid Token');
$file = JFactory::getApplication()->input->get('docfile');
jimport('joomla.filesystem.folder');
jimport('joomla.filesystem.file');
JLog::add('Post $_POST : ' . print_r($_POST, TRUE), JLog::DEBUG, 'save_override_function_in_model');
JLog::add('Data $data : ' . print_r($data, TRUE), JLog::DEBUG, 'save_override_function_in_model');
JLog::add('File $file : ' . print_r($file, TRUE), JLog::DEBUG, 'save_override_function_in_model');
return parent::save($data);
}
and theese are the log entries from the save function :
2018-07-28T07:18:04+00:00 DEBUG 127.0.0.1 save_override_function_in_model Post $_POST : Array
(
[jform] => Array
(
[title] => test
[alias] => test-test
[catid] => 0
[client_id] => 240
[published] => 0
[created] => 2018-07-20 06:07:43
)
[task] => testcom.apply
[8c0a826f880ab2cd2842de2040510c6d] => 1
)
2018-07-28T07:18:04+00:00 DEBUG 127.0.0.1 save_override_function_in_model Data $data : Array
(
[id] => 2
[title] => test
[alias] => test-test
[catid] => 0
[client_id] => 240
[published] => 0
[created] => 2018-07-20 06:07:43
[tags] =>
)
2018-07-28T07:18:04+00:00 DEBUG 127.0.0.1 save_override_function_in_model File $file : Array
(
[0] =>
)