Лучшая практика для обработки отправки формы в контроллерах - PullRequest
0 голосов
/ 03 мая 2011

Скажем, например, я создаю интернет-магазин. У меня есть контроллер с именем 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;
}

Это лучший способ справиться с этим или я должен передать его другой функции?

Ответы [ 3 ]

1 голос
/ 03 мая 2011

Не вбивайте кучу вещей в одну функцию, используя сегмент URI для ее фильтрации. createProduct () может перечислить продукты, доступные для создания (в формате CRUD, я полагаю), и отправка формы должна пропинговать другой контроллер с данными POSTed. Возможно, insertProduct (), где данные обрабатываются и отправляются в модель для вставки в базу данных.

Разделение проблем! Храните функции как можно более отдельно с хорошими дескрипторами для имен функций.

1 голос
/ 03 мая 2011

У меня (лично) будет функция, которая устанавливает параметры формы и «запускает» представление с этой формой, и другая функция, используемая для проверки и вызова модели для помещения значений этой формы в базу данных. Я считаю, что это действительно ваше дело, но код будет чище, если вы разделите контроллер с несколькими функциями в зависимости от того, что они на самом деле делают.

0 голосов
/ 03 мая 2011

Мне нравится, как Symfony работает с формами и их отправкой.Это в одной функции (действие)

упрощенный код:

executeCreate() {
$this->form = new Form()
if($r->isMethod('POST')) {
    //handle submission
    bind();
    save();
}
...