Получение значения скрытого поля ввода с использованием Javascript в Yii2

У меня есть скрытое поле ввода в представлении в ActiveForm

<?php $form = ActiveForm::begin(); ?>

    <input type="file" id="i_file" name="uploadfile" value="" onchange="abc()"> 
    <?= $form->field($model, 'path')->hiddenInput() ?>
    <div class="form-group">
        <?= Html::submitButton('submit', ['class' => 'btn btn-primary']) ?>
    </div>
<?php ActiveForm::end(); ?>

Я устанавливаю его значение с помощью Javascript, как показано ниже:

<script>
function abc(){
    var tmppath = URL.createObjectURL(event.target.files[0]);
    $("#taskreports-path").val(tmppath);

alert(document.getElementById("taskreports-path").value);
}   
</script>

Оповещение показывает, что значение успешно введено в поле. Теперь мне нужно значение этого поля ввода в некоторой переменной php, например:

$var path = //<?= $form->field($model, 'path')->hiddenInput() ?> this field's value

Как я могу сделать это в Yii2?


person Choxx    schedule 02.01.2016    source источник
comment
проверьте эту ссылку stackoverflow .com/questions/9789283/   -  person Bloodhound    schedule 02.01.2016
comment
присвоение значения с помощью javascript — это клиентская операция, а присвоение переменной PHP — действие на стороне сервера. Присвоение операции серверу переменной не может быть выполнено с помощью Javascript в clinet. Если вы хотите присвоить значение переменной или отключить, серверная сторона должна отправить ваши поля в форму или сделать вызов ajax серверному модулю, который несет это   -  person scaisEdge    schedule 02.01.2016
comment
Если ваш js заполняет форму, как и ожидалось, вы можете просто создать новое правило в своей модели, чтобы проверить значение атрибута. Если это не сработает для вас, можете ли вы лучше объяснить, что здесь происходит и чего вы пытаетесь достичь?   -  person Clyff    schedule 05.01.2016
comment
Если вы отправите форму, вы можете получить это значение в своем контроллере в объекте $model. Вы можете проверить все отправленные значения полей, как это. print_r(Yii::$app-›request-›post());   -  person Anamika Shrivastava    schedule 11.01.2016
comment
Пожалуйста, объясните подробнее, что вы хотите делать со скрытой переменной и как вы хотите использовать ее значение.   -  person Anamika Shrivastava    schedule 11.01.2016
comment
@AnamikaShrivastava Я уже сказал, что хочу значение переменной PHP на той же странице.   -  person Choxx    schedule 12.01.2016
comment
@scaisEdge @ Клифф Ян Я понял. Спасибо за предложение.   -  person Choxx    schedule 12.01.2016


Ответы (2)


Поскольку вы используете модель для создания своей формы, было бы лучше также загружать данные с использованием метода модели.

$model = new MyModel();
...
if ($model->load(Yii::$app->request->post())) {
    $model->path; //Your field's value should be loaded here
}

Обратите внимание, что атрибут «путь» должен быть указан в правилах вашей модели для загрузки методом «загрузки». Вот пример:

class MyModel extends ActiveRecord
{
   ...
   public function rules()
   {
       return [
           [['path'], 'string'],
           ...
       ];
   }
}

Вы также можете найти более подробную информацию о проверке пользовательского ввода здесь http://www.yiiframework.com/doc-2.0/guide-input-validation.html

person Dmitriy    schedule 11.01.2016

В функции действия вашего контроллера вы можете получить значение скрытого ввода таким образом.

$post = Yii::$app->request->post();
$var = $post[$model->formName()]['path'];
person Hanafi    schedule 11.01.2016