Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在控制器中处理表单提交的最佳实践_Php_Model View Controller_Forms_Controllers - Fatal编程技术网

Php 在控制器中处理表单提交的最佳实践

Php 在控制器中处理表单提交的最佳实践,php,model-view-controller,forms,controllers,Php,Model View Controller,Forms,Controllers,比如说,我正在创建一个在线商店。我有一个名为products的控制器,在该控制器中我有一个名为create_product的函数。Create_product调用一个视图,该视图显示一个表单,用户可以在该表单中将新产品输入数据库 当用户填写表单创建产品时,我是否应该将操作发送回create_产品控制器并使用IF语句处理它?还是转移到另一个功能 范例 <form method="post" action="www.example.dev/products/create_product/add

比如说,我正在创建一个在线商店。我有一个名为products的控制器,在该控制器中我有一个名为create_product的函数。Create_product调用一个视图,该视图显示一个表单,用户可以在该表单中将新产品输入数据库

当用户填写表单创建产品时,我是否应该将操作发送回create_产品控制器并使用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;
}

//上述表格将发回原始控制器
函数create_product()
{
如果(uri->段(3)=“添加”)
{
//调用一个模型来完成所有的数据库工作
}
加载->查看->创建产品表单;
}

这是处理此问题的最佳方法还是我应该将其传递给另一个函数?

我(个人)将有一个函数,用于设置表单参数并使用该表单“启动”视图,还有另一个函数用于验证和调用模型以将该表单的值放入数据库。我相信这真的取决于您,但是如果您根据控制器的实际功能将控制器划分为多个函数,那么代码会更干净

不要在一个函数中塞进太多东西,使用URI段对其进行过滤。createProduct()可以列出可用于创建的产品(我假设是CRUD格式),表单的提交应该使用发布的数据ping另一个控制器。可能是insertProduct(),其中数据经过清理并发送到模型以插入数据库


分离关注点!使用良好的函数名称描述符尽可能将函数分开。

我喜欢symfony处理表单和表单提交的方式。它在一个功能(动作)中

简化代码:

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

干杯,凯尔,我喜欢这个方法。我知道我所做的不是最好的方法,但我不确定该走哪条路。这很有道理:)没问题。另一方面,请确保使用site_url()或MVC包允许的任何函数来保持发布url的干净。您的代码看起来像CodeIgniter,所以我建议使用site_url()。是的,我确实使用base_url类型函数。我以前使用codeigniter,但现在采用FuelPHP