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

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

https://gist.github.com/1561520

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

感谢您的帮助!

【问题讨论】:

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

标签: php model-view-controller rest orm


【解决方案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 框架;很好玩!
    猜你喜欢
    • 2013-02-27
    • 2016-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-22
    • 1970-01-01
    相关资源
    最近更新 更多