atis2345
@atis2345
PHP developer

В контроллере более 1000 строк кода. Это правильно?

Контроллер содержит бизнес логику. Проверку введенных данных и т.д.
Так же содержит более 35 экшенов.
Правильно ли это? Может разбить контроллер на несколько частей?

P.S. контроллер от админки!
  • Вопрос задан
  • 356 просмотров
Решения вопроса 3
27cm
@27cm
TODO: Написать статус
Размер файла ещё не говорит о том, что в нём что-то не правильно.

Контроллер содержит бизнес логику. Проверку введенных данных и т.д.

А вот это уже не хорошо. Бизнес логику я бы убрал в модели, а проверки в фильтры и валидаторы.

Может разбить контроллер на несколько частей?

Если экшены можно логически разделить на несколько независимых групп, то почему бы и нет. Ещё иногда удаётся объединить несколько экшенов в один.
Ответ написан
Комментировать
@dmitryKovalskiy
программист средней руки
Ну вообще многовато, но бывает. Что значит "содержит бизнес логику"? Общается с базой данных запросами? тогда это большой грех. Надо выносить в отдельные классы и компоненты. Опять же сама цифра 35 мало что значит. Возможно ряд экшенов надо выносить в отдельные контроллеры просто по смыслу,а не от переизбытка методов в одном.
Ответ написан
@SergeyZelensky-Rostov
ну 35 action это нормально что поделать, а вот бизнес-логику надо держать в модели а на счет проверки данных лучше вообще ее делать отдельным модулем
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@rsi
software engineer
Вам все верно ответили выше, но у меня появилось одно нехорошее предположение. Вы сказали, что это контроллер админки, а вы случайно не положили в него один методы по управлению всеми сущностями сайта? Если да, то это конечно тоже не смертельно, но желательно разделить. Ну и неплохо было бы взглянуть на этот контроллер, хотя бы на имена методов.
Ответ написан
Комментировать
atis2345
@atis2345 Автор вопроса
PHP developer
Экшены в контроллере.
Это самые маленькие!
/**
	 * Добавляем производителя
	 * 
	 * @param string|null $result
	 */
	public function addProducer($result = null)
	{
		// проверка на авторизацию
		$this->logged();

		if (isset($_POST['submit'])) {

			$Producer = new Producer(new DataBase());
			$res = $Producer->addProducer(1, $_POST['producer']);
			$res = ($res === true) ? 'success' : 'error';

			header('Location: ' . _HTTP_SERVER . 'admin/add-producer/' . $res);
			exit;
		}

		$data = [];
		$data['result'] = $result;

		$this->renderAdminPage('add_producer', $data);
	}

	// ------- AJAX -------

	/**
	 * Удаление производителя
	 * @param int|null $producerId
	 */
	public function delProducer($producerId = null)
	{
		// проверка на авторизацию
		$this->logged();

		if (isset($_POST['producerId'])) {
			
			$Producer = new Producer(new DataBase());

			echo json_encode(['result' => $Producer->delProducer($_POST['producerId'])]);
		}
	}
Ответ написан
Ваш ответ на вопрос

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

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