Всем привет, вопрос по архитектуре сайта, стал о ней задумываться только после того как контроллер стал похож на документацию к yii, ну объемом в смысле. Сайт на AJAX, и есть в нем такая логика
// Моя страничка
public function actionIndex()
{
//Если пришел AJAX запрос
if (Yii::$app->request->isAjax) {
//Если пришел id
if (Yii::$app->request->post('id')) {
$id = Yii::$app->request->post('id');
//Обо мне с сайдбара
if ($id == 11) {
//Шаблон контента, без сайдбара
$this->layout = 'admin_content_ajx';
return $this->render('index');
}
//Личная информация (телефон, емаил)
//Рендер только нижней части
if ($id == 1) {
return $this->renderAjax('index');
}
//Мои товары
if ($id == 2) {
$query = Product::find()->with('image')->orderBy(['id' => SORT_DESC]);
$pages = new Pagination([
'totalCount' => $query->count(), 'pageSize' => 5,
'forcePageParam' => false, 'pageSizeParam' => false,
'route' => 'admin/feed/my-products'
]);
$products = $query->offset($pages->offset)->limit($pages->limit)->all();
return $this->renderAjax('my_products',compact('products','pages'));
}
//Мои сообщения
if ($id == 3) {
return $this->renderAjax('message');
}
}
//Если ничего из этого, отменить запрос
return false;
}
//Рендер всей странички Обо мне
return $this->render('index');
}
И она почти в каждом екшене. Может я изначально все не правильно распланировал(По велосипедному) менять уже поздновато, но если кто даст годные советы по архитектуре AJAX сайта, буду благодарен.
Так вот главный вопрос, я подумал может вынести ajax логику в модель?
//Если пришел AJAX запрос
if (Yii::$app->request->isAjax) {
//Если пришел id
if (Yii::$app->request->post('id')) {
$id = Yii::$app->request->post('id');
//Обо мне с сайдбара
if ($id == 11) {
//Шаблон контента, без сайдбара
$this->layout = 'admin_content_ajx';
return $this->render('index');
}
//Личная информация (телефон, емаил)
//Рендер только нижней части
if ($id == 1) {
return $this->renderAjax('index');
}
//Мои товары
if ($id == 2) {
$query = Product::find()->with('image')->orderBy(['id' => SORT_DESC]);
$pages = new Pagination([
'totalCount' => $query->count(), 'pageSize' => 5,
'forcePageParam' => false, 'pageSizeParam' => false,
'route' => 'admin/feed/my-products'
]);
$products = $query->offset($pages->offset)->limit($pages->limit)->all();
return $this->renderAjax('my_products',compact('products','pages'));
}
//Мои сообщения
if ($id == 3) {
return $this->renderAjax('message');
}
}
//Если ничего из этого, отменить запрос
return false;
}
Пробовал, вроде все норм, но вот вопрос, как сделать рендер из модели? И вообще правильно ли это?
class AdminNavigation extends Model
{
public $nav_page = 1;
public function __construct($number)
{
$this->nav_page = $number;
}
public function OwmNav() {
if ($this->nav_page == 1) {
return $this->render("index");;
}
if ($this->nav_page == 2) {
return $this->renderAjax("index");
}
}
}
Что в
$this передать если рендер в модели идет?