checkboxList передача данных в контроллер

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Piter
Сообщения: 24
Зарегистрирован: 2017.02.21, 15:37

checkboxList передача данных в контроллер

Сообщение Piter »

Здравствуйте. Прошел много форумов и статей, всё равно ничего не получается. Есть модель

Код: Выделить всё

/**
 * @inheritdoc
 */
protected $mass;
public static function tableName()
{
    return 'TestRes2_general_inf';
}
public function rules()
{
    return [
        [['id_TestRes1_all_types', 'Name'], 'required'],
        [['id_TestRes1_all_types'], 'integer'],
        [['Name'], 'string', 'max' => 150],
        [['id_TestRes1_all_types'], 'exist', 'skipOnError' => true, 'targetClass' => Testres1AllTypes::className(), 'targetAttribute' => ['id_TestRes1_all_types' => 'id']],
    ];
}
   /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        return [
            'id' => 'id программного продукта',
            'id_TestRes1_all_types'=>'id вид рез.тестирования',
            'Name' => 'Название программного продукта',
        ];
    }
     /**
     * @return \yii\db\ActiveQuery  
     */
    public function getParent()
    {
        return $this->hasOne(Testres1AllTypes::className(), ['id' => 'id_TestRes1_all_types']);
    }
}
Которая работает с базой данных и вытаскивает от туда информацию. Есть контроллер в котором я отправляю модель в представление.

Код: Выделить всё

class TestResultsController extends Controller
{
    public function actionAntivirus()
    {
        $id = Yii::$app->getRequest()->getQueryParam('id');
        $models = TestRes2GeneralInf::find()->where('id_TestRes1_all_types = :id', [':id' => $id])->all();
        /*$searchModel = new Testres1AllTypesSearch();
        $dataProvider = $searchModel->search(Yii::$app->request->queryParams);*/

        return $this->render('antivirus', [
//            'searchModel' => $searchModel,
            'models' => $models,
        ]);
    }
}
Так вот вся проблема в представлении. Эти элементы мне нужно реализовать в виде checkboxList

Код: Выделить всё

<?php

use yii\helpers\Html;
use yii\grid\GridView;
use yii\web\UrlManager;
use yii\bootstrap\ActiveForm;
use backend\models\TestRes2GeneralInf;
use yii\base\Model;
use yii\helpers\ArrayHelper;

$this->title = 'Антивирусные программы1';
$this->params['breadcrumbs'][] = $this->title;
?>
<div class="site-contact">
<h1><?= Html::encode($this->title) ?></h1>
      <div class="row">
            <div class="col-lg-5">
              <?php $form = ActiveForm::begin([
                    'id' => 'antivirus-test-results',
                    'action' => ['/test-results/antivirus-result'],
                    'options' => ['method' => 'post']
                ]);
                ?>
<?php       
             $options = ArrayHelper::map($models, 'id', 'Name');
//Не знаю как правильно или так,  
               echo $form->checkboxList($model,'mass',$options);
                 //или так
echo $form->field($models, 'mass')->checkboxList($options);          
    ?>             
                <div class="form-group">
                    <?= Html::submitButton('Результаты испытаний', ['class' => 'btn btn-primary', 'name' => 'contact-button']) 
                    ?>
                </div>

                <?php ActiveForm::end();?> 
            </div>
        </div>
Проштудировав все советы узнал что checkboxList возвращает список массивов и потому в модели нужно добавить свойство которое будет хранить массив выбранных чексбоксов. Потому модель я изменил

Код: Выделить всё

<?php

namespace backend\models;

use Yii;

class TestRes2GeneralInf extends \yii\db\ActiveRecord
{/
    protected $mass;
    public static function tableName()
    {
        return 'TestRes2_general_inf';
    }
    public function rules()
    {
        return [
            [['id_TestRes1_all_types', 'Name'], 'required'],
             ['mass', 'safe'],
            [['id_TestRes1_all_types'], 'integer'],
            [['Name'], 'string', 'max' => 150],
            [['id_TestRes1_all_types'], 'exist', 'skipOnError' => true, 'targetClass' => Testres1AllTypes::className(), 'targetAttribute' => ['id_TestRes1_all_types' => 'id']],
        ];
    }
public function getMass()
{
    return $this->mass;
}
public function setMass($value)
{
    /**
     * Здесь в приватном свойстве mass после load будет хранится массив
     */
    $this->mass = $value;
}
    public function attributeLabels()
    {
        return [
            'id' => 'id программного продукта',
            'id_TestRes1_all_types'=>'id вид рез.тестирования',
            'Name' => 'Название программного продукта',
        ];
    }
    public function getParent()
    {
        return $this->hasOne(Testres1AllTypes::className(), ['id' => 'id_TestRes1_all_types']);
    }
}
Но он все равно пишет ошибку. Я не понимаю в чем ошибка. Короче говоря мне нужно получить id-шки которые будут отмечены.
Нашел возможность где он без ошибок выводит во view-ху всё checkbox-сы которые мне нужно.

Код: Выделить всё

echo Html::checkboxList($check_values,[], ArrayHelper::map($models, 'Name', 'Name'), ['class' => 'checkbox']);

Но теперь проблема при нажатии submit,он в таком виде по моему ничего не отправляет в контроллер
Krash
Сообщения: 29
Зарегистрирован: 2016.04.19, 12:43

Re: checkboxList передача данных в контроллер

Сообщение Krash »

Piter писал(а): 2017.02.21, 16:28 Но он все равно пишет ошибку. Я не понимаю в чем ошибка.
Что за ошибка?
Piter писал(а): 2017.02.21, 16:28 Но теперь проблема при нажатии submit,он в таком виде по моему ничего не отправляет в контроллер
Проверьте вардампом
Piter
Сообщения: 24
Зарегистрирован: 2017.02.21, 15:37

Re: checkboxList передача данных в контроллер

Сообщение Piter »

Проверьте вардампом
А это как?
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: checkboxList передача данных в контроллер

Сообщение rak »

Piter писал(а): 2017.02.23, 20:21
Проверьте вардампом
А это как?
серьезно? :shock:

Код: Выделить всё

var_dump($_POST);
Piter
Сообщения: 24
Зарегистрирован: 2017.02.21, 15:37

Re: checkboxList передача данных в контроллер

Сообщение Piter »

Я прошу прощения. Я в php не очень, только начинаю разбираться и знакомится с ним. Но знаю и понимаю как работает MVC, её смысл так сказать. Можете по подробнее. Заранее спасибо.
Ответить