@EvgeniiR
https://github.com/EvgeniiR

Как правильнее передавать необязательные POST параметры в модель?

Делаю небольшой сайт-блог на PHP. Архитекуру сделал на основе этой статьи - https://habrahabr.ru/post/150267/.
К сути: Метод модели, возвращающий статьи из БД принимает два необязательных аргумента - №страницы и количество статей на страницу.
Как я понял, обработка GET и POST массивов должна находиться в контроллере. А как правильнее реализовать проверку на существование переменных и на основе их наличия/отсутствия вызывать метод модели с нужными параметрами?
В голову приходит два варианта:
1 - Проверять наличие, и на основании результата вызывать метод без параметров/с одним параметром/с думя параметрами
2 - Если переменные не заданы, заполнять их стандартными значениями ещё в конструкторе контроллера.
Метод модели:
public function get_data($articles_pp = 2, $page = 1)
	{
		$pdo = self::connect();
		for($i=($articles_pp*$page); $i>=$page*$articles_pp-($articles_pp-1); $i--) 
		{
			$data = $pdo->query('SELECT * FROM articles WHERE id = '.$i);
			$return_arr[$i] = $data->fetch();
		}
		return $return_arr;
	}

Контроллер:
public $articles_pp;
	public $page;
	function __construct()
	{
		$this->model = new Model_Main();
		$this->view = new View();
		//if(isset($_POST['page'])) $this->page  = $_GET['page'];
		$this->page  = $_GET['page'];
		$this->articles_pp  = $_GET['articles_pp'];
	}
	
	function action_index()
	{	
		$data = $this->model->get_data($this->articles_pp, $this->page);
		$this->view->generate('main_view.php', 'template_view.php', $data);
	}
  • Вопрос задан
  • 112 просмотров
Решения вопроса 1
Странный запрос на выборку из базы - зачем на каждую статью слать запрос? Можно выбрать все статьи через LIMIT и OFFSET.

По вопросу - вариант 2
При отсутствии необязательных параметров заменяем их значениями по умолчанию и передаем в модель.
И получение параметров лучше убрать из конструктора т.к. зачастую методы экшены контроллера имеют разный набор параметров.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
pingo
@pingo
в контроллере привязка модели и представления, проверка в модели.
а вообще, анипатерн сейчас рулит, отдаешь орм модель, набитую данными прямо в представление и прямо в роуте :)
$data          =   \App\Models\Data::orderBy('name')
                                                     ->approved()
                                                     ->paginate(4, ['*'], 'page', $page);
       return view('data', compact('data'));
Ответ написан
VladimirAndreev
@VladimirAndreev
php web dev
Проверять в модели.
И это, а если кто-то пост удалит, то работать код будет неправильно
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы