Пытаюсь сделать фильтрацию на yii2. Есть поле формы в ней 3 input(type="radio") , каждый инпут должен искать товары с ценой в данном диапазоне. Вот код контроллера где выполняется поиск :
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();
}
//Создаем объект класса Pagination
//Передаем тотал каунт - общее количество записей, которыe мы вытащим
$pages = new Pagination(['totalCount' => $query->count(), 'pageSize' => 2, 'forcePageParam' => false, 'pageSizeParam' => false]);
//Выполняем сам запрос
//offset - с какой записи начинать
//limit - количество записей
$products = $query->offset($pages->offset)->limit($pages->limit)->all();
return $this->render('filter', compact('products', 'pages', 'filter', 'model'));
}
Код модели товаров :
<?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()
{
//Связь таблиц, один продукт может иметь одну категорию (hasOne())
return $this->hasOne(Category::className(), ['id' => 'category_id']);
}
}
?>
И код самой формы :
<?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() ?>
Как мне поместить в свойства $Button1,$Button2,$Button3 price из таблицы товаров, чтобы при клике на определенный инпут он выводил товары как сделано в условии контроллера(то есть по диапазону цены)
Значит, идем в документацию, видим:
The data item used to generate the radio buttons. The array values are the labels, while the array keys are the corresponding radio values.
Значит, radioList первым параметром, ожидает от вас, массив где ключи это ЗНАЧЕНИЯ инпута, а значения массива - это labels (этикетка/описание).
Собственно, если вы загляните в html, что выходит из вашего кода:
$form->field($model, 'radioButtonList')
->radioList([
'Button1' => 'от 0-1500',
'Button2' => 'от 3000-5000',
'Button3' => 'от 5000-20000'
]);
То увидите примерно:
<label>от 0-1500</label>
<input type="radio" value="Button1" name="radioButtonList"/>
<label>от 3000-5000</label>
<input type="radio" value="Button2" name="radioButtonList"/>
<label>от 5000-20000</label>
<input type="radio" value="Button3" name="radioButtonList"/>
Что будет если запостить такую форму? Ну к примеру постом? Что получите?
Вы получите в переменой $_POST по ключу radioButtonList значение Button1, Button2 или Button3.
И как же нам получить значение?
Из массива на прямую - $_POST['radioButtonList']
Через метод фреймворка - Yii::$app->request->post('radioButtonList')
Загрузить в модель -
$model = new Product();
if($model->load(Yii::$app->request->post())){
... $model->radioButtonList;
}
Пока, ваш контроллер это сплошной набор строк кода, который даже связать в голове не выходит, даже описывать не хочу. Просто укажу вам, что по умолчанию, ваша форма будет слать POST запрос.
Причина ваших проблем (мне кажется, что та же причина, почему вам не хотят помогать тут) - вам стоит изучить документацию, и повторить примеры которые в ней. Это вообще как минимум. (хотя бы - ссылка).
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости