UploadForm Yii2
UploadForm Yii2
Встала задача сделать загрузчик файлов, но перед загрузкой на сервер нужно дать возможность пользователю менять тайтл (не назву файла). Я написал js скрипт который при выборке файлов добавляет инпут с тайтлами и эти тайтлы отправляю в модель uploadform вместе с файлами. Проблема в том, что в атрибут который я создал для этих тайтлов ничего не пишется, хотя в пост запросе они есть.
Re: UploadForm Yii2
Что-то не понял, в чём проблема?
"атрибут который я создал для этих тайтлов" - о чём тут говорится? Какие атрибуты?
"атрибут который я создал для этих тайтлов" - о чём тут говорится? Какие атрибуты?
Re: UploadForm Yii2
Колесо строится))) Дело мутится))
Что за назва?
Как делаете сохранение?
Код в студио
Что за назва?
Как делаете сохранение?
Код в студио
Re: UploadForm Yii2
Ето форма в которую я загружаю файли:
Код: Выделить всё
{{ use('/app/widgets/Alert') }}
<div class="site-index">
<div class="body-content">
<div class="row">
<div class="col-lg-12">
<h2>Add new customer</h2>
<div class="row">
<div class="col-lg-12">
{% set form = form_begin({
'id': 'addNewCustomerForm',
'options': {
'data-pjax': '',
'class': 'form-horizontal',
'enctype': 'multipart/form-data'
},
'fieldConfig': {
'template': '
{label}
<div class="col-lg-5">
{input}
{error}
</div>',
'labelOptions': {'class': 'col-lg-2 control-label'},
}
}) | raw %}
<div class="panel panel-default">
<div class="panel-heading">Customer info</div>
<div class="panel-body">
{{ form.field(model, 'customerLogin') | raw }}
{% if showPartnersList == true %}
{{ form.field(model, 'customerPartnerId').dropDownList(model.getPartnersArray()) | raw }}
{% endif %}
{{ form.field(model, 'customerLocationId').dropDownList(model.getLocationsArray()) | raw }}
{{ form.field(model, 'customerCategory').dropDownList(model.getCategoriesArray()) | raw }}
{{ form.field(model, 'customerPassword') | raw }}
{{ form.field(model, 'customerName') | raw }}
{{ form.field(model, 'customerEmail') | raw }}
{{ form.field(model, 'customerPhone') | raw }}
{{ form.field(model, 'customerStreet1') | raw }}
{{ form.field(model, 'customerZipCode') | raw }}
{{ form.field(model, 'customerCity') | raw }}
{{ form.field(model, 'customerDateAdd')
.widget(DatePicker.classname(), {
'dateFormat': 'yyyy-MM-dd',
'options': {
'class': 'form-control'
}
}) | raw }}
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">Service info</div>
<div class="panel-body">
{{ form.field(model, 'serviceTariffId').dropDownList(model.getInternetTariffsArray(), {
'id': 'serviceTariffId',
'prompt': 'Choose tariff...'
}) | raw }}
{{ form.field(model, 'serviceDescription').textInput({
'id': 'serviceDescription'
}) | raw }}
{{ form.field(model, 'serviceQuantity') | raw }}
{{ form.field(model, 'serviceUnit') | raw }}
{{ form.field(model, 'serviceUnitPrice').textInput({
'id': 'serviceUnitPrice'
}) | raw }}
{{ form.field(model, 'serviceDiscount').checkbox({
'id': 'serviceDiscount',
'template': '
{label}
<div class="col-lg-5">
{input}
{error}
</div>'
}).label(model.getAttributeLabel('serviceDiscount'), {
'class': 'col-lg-2 control-label'
}) | raw }}
{{ form.field(model, 'serviceDiscountPercent', {
'options': {
'class': 'discount form-group hide',
}
}) | raw }}
{{ form.field(model, 'serviceDiscountStartDate', {
'options': {
'class': 'discount form-group hide'
}
})
.widget(DatePicker.classname(), {
'dateFormat': 'yyyy-MM-dd',
'options': {
'class': 'form-control'
}
}) | raw }}
{{ form.field(model, 'serviceDiscountEndDate', {
'options': {
'class': 'discount form-group hide'
}
})
.widget(DatePicker.classname(), {
'dateFormat': 'yyyy-MM-dd',
'options': {
'class': 'form-control'
}
}) | raw }}
{{ form.field(model, 'serviceDiscountText', {
'options': {
'class': 'discount form-group hide'
}
}) | raw }}
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">Payment info</div>
<div class="panel-body">
{{ form.field(model, 'paymentAmount') | raw }}
{{ form.field(model, 'paymentComment') | raw }}
</div>
</div>
{{ form.field(files, 'names').textInput({
'value' : '123'
}) | raw }}
<div class="panel panel-default">
<div class="panel-heading">Attachments</div>
<div class="panel-body">
{{ form.field(files, 'files[]').fileInput({
'multiple': true,
}) | raw }}
<small>5 files maximum.</small></br>
<div id="list" class="col-lg-4"></div>
</div>
</div>
<div>
{{ alert_widget() | raw }}
</div>
<div class="form-group">
<div class="col-lg-12 text-center">
{{ Html.submitButton('Add', {
'class': 'btn btn-primary',
'name': 'add-button'
}) | raw }}
</div>
</div>
{{ form_end() }}
</div>
</div>
</div>
</div>
</div>
</div>
Re: UploadForm Yii2
А ето форма обработчик
Код: Выделить всё
class UploadForm extends Model
{
/**
* @var UploadedFile[]
*/
public $names;
public $files;
public function rules()
{
return [
['names', 'string'],
[['files'], 'file', 'skipOnEmpty' => true, 'extensions' => 'png, jpg, doc, pdf, xls, docx, xlsx, txt', 'maxFiles' => 5],
];
}
public function upload()
{
if ($this->validate()) {
foreach ($this->files as $file) {
$file->saveAs(Yii::$app->getBasePath() . '/uploads/' . $file->baseName . '.' . $file->extension);
}
return true;
} else {
return false;
}
}
public function uploadForCustomer($customer_id)
{
if ($this->validate()) {
foreach ($this->files as $key => $file) {
if (!empty($file)) {
$name = self::generateRandomString(16) . '.' . $file->extension;
$file->saveAs(Yii::$app->getBasePath() . '/uploads/' . $name);
$attachment = new CustomerAttachments();
$attachment->customer_id = $customer_id;
$attachment->file_title = $this->getTitle() . '.' . $file->extension;
$attachment->file_name = $name;
$attachment->date = date('Y-m-d');
$attachment->save();
}
}
return true;
} else {
return false;
}
}
public static function generateRandomString($length = 10)
{
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$charactersLength = strlen($characters);
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[rand(0, $charactersLength - 1)];
}
return $randomString;
}
public function getTitle()
{
if (empty($this->names)) {
return '321';
} else {
return $this->names;
}
}
}
Re: UploadForm Yii2
Никто не знает в чем может быть проблема или я задал глупый вопрос?
Re: UploadForm Yii2
Я так понял, поля из POST не загружаются в модель?
Чтобы они загружались в модель, их надо в "rules" для модели прописать, либо валидатором либо просто "safe".
Чтобы они загружались в модель, их надо в "rules" для модели прописать, либо валидатором либо просто "safe".
Re: UploadForm Yii2
Код: Выделить всё
if ($model->load(...)) {
$model->files = UploadedFile::getInstances($model, 'files');
if ($model->validate()) {
...
}
}
Re: UploadForm Yii2
ElisDn благодарю, 5 минут назад, понял где косяк.)