Php 在控制器中处理表单提交的最佳实践
比如说,我正在创建一个在线商店。我有一个名为products的控制器,在该控制器中我有一个名为create_product的函数。Create_product调用一个视图,该视图显示一个表单,用户可以在该表单中将新产品输入数据库 当用户填写表单创建产品时,我是否应该将操作发送回create_产品控制器并使用IF语句处理它?还是转移到另一个功能 范例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
<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