J'essaie de filtrer sur yii2. Il y a un champ de formulaire dans l'entrée 3 (type = "radio"), chaque entrée doit rechercher des produits avec un prix dans cette gamme. Voici le code du contrôleur où la recherche est effectuée:Filtrage yii2 produit une erreur Appel à une fonction membre isAttributeRequired() sur null
public function actionFilter()
{
$filter = trim(Yii::$app->request->get('filter'));
$this->setMeta('MAC-SHOPPER | ' . $filter);
if (!$filter) {
return $this->render('filter');
}
/*
if ($filter <= 15) {
$query = Product::find()->where(['<=', 'price', 15]);
}*/
$model = new Product();
if($Button1) {
$query = Product::find()->where(['between', 'price', "0", "50" ])->all();
}
$pages = new Pagination(['totalCount' => $query->count(), 'pageSize' => 2, 'forcePageParam' => false, 'pageSizeParam' => false]);
$products = $query->offset($pages->offset)->limit($pages->limit)->all();
return $this->render('filter', compact('products', 'pages', 'filter', 'model'));
}
Code de modèle du produit:
<?php
namespace app\models;
use yii\db\ActiveRecord;
class Product extends ActiveRecord
{
public $Button1;
public $Button2;
public $Button3;
public $radioButtonList;
public function behaviors()
{
return [
'image' => [
'class' => 'rico\yii2images\behaviors\ImageBehave',
]
];
}
public static function tableName()
{
return 'product';
}
public function getCategory()
{
return $this->hasOne(Category::className(), ['id' => 'category_id']);
}
}
?>
Et le code de la forme elle-même:
<?php $form = ActiveForm::begin([
'id' => 'task-form',
'action' => \yii\helpers\Url::to(['category/filter']),
]
)?>
<?= $form->field($model, 'radioButtonList')
->radioList([
'Button1' => 'от 0-1500',
'Button2' => 'от 3000-5000',
'Button3' => 'от 5000-20000'
],[
'id' => 'radio_button',
]); ?>
<?= Html::submitButton('Найти', ['class' => 'btn btn-success']);?>
<?php $form = ActiveForm::end() ?>
Comment puis-je mettre dans la propriétés $ Button1, $ Button2, $ Button3 prix de la table des marchandises, de sorte que lorsque je clique sur une certaine inférence, il affiche les marchandises comme fait dans l'état du contrôleur (c'est-à-dire, par la gamme de prix)