如何从 HTML (PHP) 表单中调用我的 (tiny) mvc 方法?

Posted

技术标签:

【中文标题】如何从 HTML (PHP) 表单中调用我的 (tiny) mvc 方法?【英文标题】:How to call my (tiny) mvc methods from HTML (PHP) forms? 【发布时间】:2012-01-04 19:25:34 【问题描述】:

我在 gist 中发布了相关代码:

https://gist.github.com/1561520

我想知道是否有人可以告诉我从我的表单中调用 ReportsController->create() 方法的正确方法是什么。我能想出的唯一想法是让表单有一个随机动作,比如action="application/views/reports/new.php",然后从那里调用我的控制器创建方法。问题是,这违背了__autoload 函数的目的,除非我弄错了。

感谢您的帮助!

【问题讨论】:

有人告诉我“绑定”框架将如何做到这一点。有人有什么入门技巧吗? 我不知道什么是“绑定”框架。看起来您需要找到控制器的表单操作 href。创建您自己的“链接”,在请求进入时转换它们,并在响应发出时在 html 输出中替换它们。您可以使用一些逻辑调用函数或使用输出缓冲(后处理视图)。 【参考方案1】:

我会试试PHP-router 这样的简单路由器。

<?php

require 'Router.php';

$r = new Router();

// maps '/report/create' to controller ReportsController->create().
$r->match('/report/create','ReportsController#create');

if($r->hasRoute())  ?>

    <h1>Route found!</h1>
    <p><b>Controller: </b><?php echo $r->getRoute()->controller; ?></p>
    <p><b>Action: </b><?php echo $r->getRoute()->action; ?></p>
    <p><b>Params: </b><?php var_dump($r->getRoute()->params); ?></p>

<?php

// Load controller
$controller = new $r->getRoute()->controller;

// Call controller action, and pass params
call_user_func_array(array($controller, $r->getRoute()->action), $r->getRoute()->params);


else

    die('<h1>No route found.</h1>');

【讨论】:

【参考方案2】:

绑定框架不过是 index.php 中的一个逻辑,用于根据 HTTP 请求的属性(尤其是 URI)自动加载相关控制器。

如果您愿意,可以在这里混合使用 RESTful 语义。因此,使用表单中的数据发送到/reports 将创建报告。 GET 到/reports/... 将获取报告等...

过去,我所做的就是利用$_SERVER['PATH_INFO']。

所以表单将 POST 到 index.php/reports,这将为您的 index.php 提供足够的信息来决定哪个控制器实例化,以便处理请求。您可以将更多选项编码到 URI 中,例如 index.php/reports/create,但这有点难看 IMO。我个人更喜欢这里的 RESTful 概念。所以如果你要使用 RESTful,你需要检查 $_SERVER['REQUEST_METHOD'] 并决定调用哪个函数。明智的做法是决定和标准化处理每个 HTTP 方法的函数的名称,例如 Create 用于 POST、Fetch 用于 GET、Remove 用于 DELETE 等。

现在我们知道要加载哪个控制器以及必须执行什么操作,您需要让控制器实例化模型,然后根据方法(或 PATH_INFO 中的额外参数)调用相关函数。

我希望我已经给了你足够的帮助,让你摆脱手头的问题。

【讨论】:

这是我已经开始前进的方向,你让我对 RESTful 方式有了很好的了解。作为一名 Rails 开发人员,我真的更喜欢休息。 很高兴我能帮上忙;顺便说一句,即使我已经做了很多 MVC(仅由于我公司的限制/约定),我更喜欢在资源概念之上建模 RESTful API。恕我直言,用于简单 Web 应用程序的 MVC 被高估了!祝你冒险进入自己的 PHP 框架;很好玩!

以上是关于如何从 HTML (PHP) 表单中调用我的 (tiny) mvc 方法?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 PHP 调用 R 脚本?

如何从 HTML 表单调用现有的 REST api?

如何在自动生成的for循环中从html表单中获取唯一值

通过表单将数据从一个表插入到另一个表

如何在wordpress中制作联系表格调用另一个php文件

如何使用本地 xampp 和 php 联系人表单从我的 mac 发送邮件