2017-09-15 7 views
3

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)

Répondre

0

La méthode de formulaire est dans "post" et vous essayez de retriver les données par get. Je change comme ceci:

public function actionFilter() 
{ 
    $filter = trim(Yii::$app->request->post('filter')); 
    $this->setMeta('MAC-SHOPPER | ' . $filter); 
    if (!$filter) { 
     return $this->render('filter'); 
    } 
........ 
} 

Je ne sais pas si vous résoudrez votre problème, mais cela est un autre.