#php #model-view-controller #forms #controllers
#php #модель-представление-контроллер #формы #контроллеры
Вопрос:
Допустим, например, я создаю интернет-магазин. У меня есть контроллер с именем products, и внутри этого контроллера у меня есть функция с именем create_product. Create_product вызывает представление, которое отображает форму, в которой пользователи могут вводить новые продукты в базу данных.
Когда пользователь заполняет форму для создания продукта, должен ли я отправить действие обратно в контроллер create_product и обработать его с помощью оператора IF? или выгрузить в другую функцию?
Пример
<form method="post" action="www.example.dev/products/create_product/add">
//the above form would post back to the original controller
function create_product()
{
if(uri->segment(3) == "add")
{
//call a model to do all the database stuff
}
load->view->create_product_form;
}
Это лучший способ справиться с этим или я должен передать его другой функции?
Ответ №1:
Не втискивайте кучу материала в одну функцию, используя сегмент URI для его фильтрации. createProduct () может перечислять продукты, доступные для создания (я полагаю, в формате CRUD), и при отправке формы должен быть выполнен пинг другого контроллера с размещенными данными. Возможно, insertProduct(), где данные очищаются и отправляются модели для вставки в базу данных.
Разделение проблем! Сохраняйте функции как можно более раздельными с хорошими дескрипторами для имен функций.
Комментарии:
1. Приветствую, Кайл, мне нравится этот метод. Я знал, что то, что я делал, было не лучшим способом сделать это, но не был уверен, каким путем идти. В этом так много смысла 🙂
2. Нет проблем. Кроме того, обязательно используйте site_url() или любую другую функцию, которую позволяет ваш пакет MVC, чтобы сохранять URL-адреса отправки чистыми. Ваш код выглядит как CodeIgniter, поэтому я предложил site_url().
3. Да, я использую функцию типа base_url. Раньше я использовал codeigniter, но в настоящее время использую FuelPHP
Ответ №2:
У меня (лично) была бы функция, которая устанавливает параметры формы и «запускает» представление с этой формой, и другая функция, используемая для проверки и вызова модели для помещения значений этой формы в базу данных. Я считаю, что это действительно зависит от вас, но код был бы чище, если бы вы разделили контроллер на несколько функций в зависимости от того, что они на самом деле делают.
Ответ №3:
Мне нравится, как symfony справляется с формами и отправкой форм. Это в одной функции (действии)
упрощенный код:
executeCreate() {
$this->form = new Form()
if($r->isMethod('POST')) {
//handle submission
bind();
save();
}