@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);
	}
  • Вопрос задан
  • 90 просмотров
Решения вопроса 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
Проверять в модели.
И это, а если кто-то пост удалит, то работать код будет неправильно
Ответ написан
Ваш ответ на вопрос

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

Войти через TM ID
Похожие вопросы
ООО "МПК" Москва
от 100 000 руб.
HTML Academy Санкт-Петербург
от 130 000 до 140 000 руб.
Duotek Москва
До 120 000 руб.
15 авг. 2018, в 23:38
300 руб./за проект
15 авг. 2018, в 22:39
60000 руб./за проект
15 авг. 2018, в 21:18
30000 руб./за проект