Yii2. Какие специальные html-данные \Yii\grid\dataColumn::filter нужны?

Я пытаюсь работать с HTML, и этот DataColum работает, поле ввода фильтрует, но не показывает ошибки проверки, когда они возникают. Я имею в виду, что GridView не добавляет к элементу .has-error и т. д.

Контроллер/действие

 public function actionIndex()
    {
    $searchModel = new OrderSearch();
    $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
    $dataProvider->sort->defaultOrder = ['created_at' => SORT_DESC];

    return $this->render('index', [
    'searchModel' => $searchModel,
    'dataProvider' => $dataProvider,
    ]);
    }

 public function actionIndex()
    {
        $searchModel = new OrderSearch();
        $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
        $dataProvider->sort->defaultOrder = ['created_at' => SORT_DESC];

        return $this->render('index', [
            'searchModel' => $searchModel,
            'dataProvider' => $dataProvider,
        ]);
    }

Вид сетки

<?= GridView::widget([
    'dataProvider' => $dataProvider,
    'filterModel' => $searchModel,
    'columns' => [
    //['class' => 'yii\grid\SerialColumn'],
    [
    'attribute' => 'id',
    'filter' => false,
    ],
    [
    'attribute' => 'number',
    'filter'=> '<input type="text" name="OrderSearch[number]" class="form-control">',
    'format' => 'raw',
    'value' => function($model) {
    //return sprintf('%08d', $model->number);
    return Html::a(sprintf('%08d', $model->number), ['customer/orders', 'id'=>$model->customer->id, 'highlight'=>$model->id]);
    }],
    //['class' => 'yii\grid\ActionColumn'],
    ],
    ]); ?>

ПоискМодель

   <?php

    namespace app\models;

    use Yii;
    use yii\base\Model;
    use yii\data\ActiveDataProvider;
    use app\models\Order;

    /**
     * OrderSearch represents the model behind the search form about `app\models\Order`.
     */
    class OrderSearch extends Order
    {

        public $createdAtDate;
        public $createdAtDateMachineFormat;
        public $createdAtTime;
        public $createdAtTimeMachineFormat;


        /**
         * @inheritdoc
         */
        public function rules()
        {
            return [
                [['id', 'number', 'status', 'customer_id'], 'integer'],];
        }

        public function attributeLabels()
        {
            return [
                'createdAtDate' => 'Creado en',
                'createdAtTime' => 'Hora',
                'number' => 'Número de Orden',
            ];
        }

        /**
         * @inheritdoc
         */
        public function scenarios()
        {
            // bypass scenarios() implementation in the parent class
            return Model::scenarios();
        }

        /**
         * Creates data provider instance with search query applied
         *
         * @param array $params
         *
         * @return ActiveDataProvider
         */
        public function search($params)
        {
     
            $query = Order::find();

            $dataProvider = new ActiveDataProvider([
                'query' => $query,
            ]);

            $this->load($params);

            if (!$this->validate()) {
                // uncomment the following line if you do not want to return any records when validation fails
                // $query->where('0=1');
                return $dataProvider;
            }

    $query->andFilterWhere([
    'id' => $this->id,
    'number' => $this->number,
    'status' => $this->status,
    //'created_at' => $this->created_at,
    'finished_at' => $this->finished_at,
    'customer_id' => $this->customer_id,
    ]);

    return $dataProvider;
    }
    }

Модель

<?php

namespace app\models;

use Yii;

/**
 * This is the model class for table "order".
 *
 * @property integer $id
 * @property integer $number
 * @property integer $status
 * @property integer $created_at
 * @property integer $finished_at
 * @property integer $customer_id
 *
 * @property Customer $user
 */
class Order extends \yii\db\ActiveRecord
{
    
    const STATUS_IN_PROCESS = 0;
    const STATUS_COMPLETED = 1;
    
    public $created_at_date;
    public $created_at_time;
    
    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return 'order';
    }

    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [[/*'id', */'number', /*'status', 'created_at', 'customer_id'*/], 'required'],
            [[/*'id',*/ 'number', /*'status', 'created_at', 'finished_at', */'customer_id'], 'integer'],
            [['number'], 'unique']
        ];
    }

    /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        return [
            'id' => 'ID',
            'number' => 'Numero de Orden',
            'status' => 'Estado',
            'created_at' => 'Creado en',
            'finished_at' => 'Finalizado en',
            'customer_id' => 'ID Cliente',
            'createdAtDate' => 'Creado en',
            'createdAtTime' => 'Hora',
        ];
    }

    /**
     * @return \yii\db\ActiveQuery
     */
    public function getCustomer()
    {
        return $this->hasOne(Customer::className(), ['id' => 'customer_id']);
    }

    public function beforeSave($insert)
    {
        if (parent::beforeSave($insert)) {
            $this->isNewRecord ? $this->created_at = gmdate('Y-m-d H:i:s') : null;
            return true;
        } else {
            return false;
        }
    }
    
    

}


person hon342    schedule 04.06.2016    source источник
comment
пожалуйста, предоставьте код gridview, контроллера/действия и searchModel ..   -  person scaisEdge    schedule 04.06.2016
comment
@scaisEdge Привет, у меня были некоторые проблемы с форматированием при публикации, но данные в порядке. Я удалил информацию, не относящуюся к проблеме, некоторые атрибуты могут отсутствовать, не обращайте на это внимания.   -  person hon342    schedule 04.06.2016
comment
код seacrhModel генерируется gii или кодируется вручную?   -  person scaisEdge    schedule 04.06.2016
comment
а также укажите код модели заказа ..   -  person scaisEdge    schedule 04.06.2016
comment
@scaisEdge Я изменил его, но он произошел от gii. Я обрезал некоторые части из первых трех фрагментов, чтобы они не были слишком длинными. Модель добавлена!   -  person hon342    schedule 04.06.2016
comment
Почему у вас есть код поля ввода в фильтре для столбца number   -  person scaisEdge    schedule 04.06.2016
comment
LOL, мне нужно, чтобы это упражнение работало при работе с html, чтобы я учился и мог использовать более сложные элементы, такие как средство выбора даты, в html.   -  person hon342    schedule 04.06.2016
comment
По умолчанию gridview создает поле ввода для фильтра.. поэтому попробуйте.. удалить.. запись фильтра должна работать....   -  person scaisEdge    schedule 04.06.2016
comment
Этот фильтр отсутствует по ошибке, это фактически заголовок вопроса, какое значение требуется в ключе фильтра для работы. Если вы не должны использовать поле по умолчанию, что бы вы поместили вместо него.   -  person hon342    schedule 04.06.2016
comment
Я добавил предложение, на которое я отвечаю .. надеюсь, полезно   -  person scaisEdge    schedule 04.06.2016


Ответы (1)


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

Url::to(['/your-controller/your-action', 'YourModelSearch' => ['number'=> 'your_value']])
person scaisEdge    schedule 04.06.2016
comment
Не сразу вижу связь с ответом, возможно уже поздно, пока посплю. Большое спасибо. - person hon342; 04.06.2016