Php MVC表单数据提交给控制器
我正在设法部署一个非常简单的实现,其中包含一个注册表单,出于演示目的,我选择使用MVC模式 我的小问题是,当我按下submit按钮时,我希望通过控制器的适当方法处理提交的数据 例如: 在视图部分中,我声明如下形式:Php MVC表单数据提交给控制器,php,forms,model-view-controller,Php,Forms,Model View Controller,我正在设法部署一个非常简单的实现,其中包含一个注册表单,出于演示目的,我选择使用MVC模式 我的小问题是,当我按下submit按钮时,我希望通过控制器的适当方法处理提交的数据 例如: 在视图部分中,我声明如下形式: <form action="controller/validate" method="post"/> 我假设这是一个路由相关的事情,但我很好奇是否可以建议另一种方式 -- 问候, Theo通常,您可以通过一条路径(如POST/register)访问控制器。控制器操作
<form action="controller/validate" method="post"/>
我假设这是一个路由相关的事情,但我很好奇是否可以建议另一种方式
--
问候,
Theo通常,您可以通过一条路径(如
POST/register
)访问控制器。控制器操作在引导文件中分配给此路由。一些伪代码:
$framework->route('GET', '/register',
'RegistrationController::action_form');
$framework->route('POST', '/register',
'RegistrationController::action_submit');
另一种方法是将路由直接映射到控制器(有些框架会这样做,我相信Kohana就是其中之一),如下所示:
- 路线:
/注册/提交
- 解析为:
RegisterContoller::action\u submit()
- 在操作方法中管理请求方法(
,GET
,POST
,PUT
)DELETE
switch($_SERVER['REQUEST_URI']) {
case 'controller/validate':
$view = new \Views\User\Registration();
$controller = new \Controllers\UserRegistration($view);
$method = 'validate';
break;
default:
$view = new \Views\Error\NotFound();
$controller = new \Controllers\Error($view);
$method = 'notFound';
break;
}
echo $controller->$method();
还要注意的是,与基于当前路径执行相对URL不同,您通常真正希望执行文档根的相对URL:
<form action="/controller/validate" method="post"/>
注意前面的斜杠
以上只是半伪代码的一个简单(未经测试)示例谢谢你,卢卡斯。我目前正在寻找的是,是否有一种较短的路由选择方法。@thitami,它将最接近我提到的第二种方法。路由只是某事物的一个名称;您始终必须以某种方式为请求分配控制器。我的建议是自动映射如下请求:
/
映射到Controller::action()
。注意名称的控制器
后缀和操作
前缀。这避免了公共调用其他类或方法(如InternalClass::do\u something\u internal()
)。长时间使用框架的用户(比如我)在考虑裸PHP时似乎倾向于使事情过于复杂。是的,它不会是一个复杂的构建,因此您的回复非常接近我的要求。您是否建议将其创建为一个单独的文件(就不是控制器而言),将其集成到index.php中,或者采用另一种方式?@thitami每当我使用上述内容时,我都会在引导文件中执行此操作(在大多数应用程序中基本上是index.php文件)。引导文件完成了应用程序运行所需的所有初始化。我可能会将其放入类似于bootstrap.php
的文件中,并将其包含在index.php
中。不过,我还是会考虑将来的扩展(比如多个前端控制器——可能是debug.php
)。在您的情况下,index.php
可能就足够了。谢谢大家。非常感谢你的帮助。我接受佩哈的回答。