Добрый день.
Обратились ко мне с предложением внести некоторые правки на сайте, который разработан на yii2.
Пока требовалось настроить urlManager(), но будут и ещё куча правок.
Сайт по продаже/найму автомобилей.
Заглянув в один из контроллеров я немного "завис". Контроллер из 1 500 строк, большинство действий в нём получают информацию из базы об автомобилях, но с разными параметрами.
Вот пример такого действия, выбор из базы автомобилей в заданном регионе.
actionSearchByRegionpublic function actionSearchByRegion($region = null)
{
if (\Yii::$app->request->isGet) {
$region = \Yii::$app->request->get('region-name');
$region = str_replace('-', ' ', $region);
// $region = substr($region, 0, 5);
$region = Regions::find()
->select('region_id')
->where(['like', 'region_name', $region])
->asArray()
->one();
if (!empty($region)) {
$cars = Cars::find()
->where(['=', 'car_region', $region['region_id']])
->andWhere(['=', 'car_sold', 0])
->orderBy(['id' => SORT_DESC])
->asArray();
$query = $cars;
$countQuery = clone $query;
$pages = new Pagination([
'totalCount' => $countQuery->count(),
'defaultPageSize' => 12,
]);
$models = $query->offset($pages->offset)->limit($pages->limit)->all();
return $this->render('search', [
'cars_res' => $models,
'pages' => $pages,
]);
}
}
}
Следующим действием идёт
actionSearchByCity, в котором получают автомобили с заданным городом. Так же есть
actionSearchByRegionCityMark и
actionSearchByRegionCityMarkModel, в которых необходимо получить автомобили данной модели и марки привязанных к заданному региону и городу соответственно.
Поисковой модели как таковой нет, есть, опять же, отдельное действие для поиска.
Связей между моделями нет, внешних ключей нет. При этом в debug панели показывает свыше 150 запросов к базе данных. Многие запросы при этом дублируются.
В представлениях, которые подключает данный контроллер есть, на мой взгляд, совсем "прекрасный" код.
<?= $form->field($searchcar, 'city')->label('Okres')->dropDownList(
// ArrayHelper::map(\backend\models\City::find()->where(['region_id' => $searchcar->state])->asArray()->all(), 'city_id', 'city_name'),
ArrayHelper::map(\backend\models\City::find()->where(['region_id' => $_GET['SearchCar']['state'] ? $_GET['SearchCar']['state'] : $_GET['region']])->asArray()->all(), 'city_id', 'city_name'),
[
'prompt' => 'Vyberte okres',
///'value' => $_GET['SearchCar']['city'] ? $_GET['SearchCar']['city'] : $_GET['city']
]
) ?>
Вот код контроллера
полностью. Посмотрите, пожалуйста, опытным глазом и выскажите своё мнение.
Опыта у меня не очень много, поэтому хотелось бы узнать мнение более опытных людей, что с этим кодом делать?
Оставить как есть и вносить мелкие правки или всё таки предложить переписать?
Чего именно хотел добиться предыдущий разработчик таким кодом(отсутствием связей, внешних ключей и т.д.)?
Что мне сказать заказчику по поводу правок?