【问题标题】:Front controller pattern - is router a front controller?前端控制器模式 - 路由器是前端控制器吗?
【发布时间】:2015-11-30 02:29:02
【问题描述】:

我试图了解前端控制器应该是什么样子。来自维基百科,

前端控制器模式是一种软件设计模式,列于 几个模式目录。该模式与网页设计有关 应用程序。它“为处理提供了一个集中的入口点 请求。”

那么,下面处理 Slim 中路由的代码是前端控制器吗?

$app = new \Slim\Slim();
$app->get('/books/:id', function ($id) use ($app) {

    // Get all books or one book.
    $bookModel = new ...
    $bookController = new ...

    $app->render('myTemplate.php', array('id' => $id, ...));
});

$app->run();

【问题讨论】:

    标签: php design-patterns slim front-controller


    【解决方案1】:

    为处理请求提供一个集中的入口点。

    是的,Slim 可以是某种前置控制器。它处理所有传入的请求并将它们带到正确的位置/控制器。

    不要把前置控制器和MVC模式的控制器混为一谈。

    在您的示例中,路由是前端控制器的一部分,应该调用您的 MVC 模式的控制器。这个 MVC 控制器(在您的示例 $bookController 中)负责评估信息、向视图提交信息并显示视图。因此,您的示例应如下所示:

    //Inside of your frontcontroller, defining the route:
    $app->get("/books/:id", "bookController:displayBook");
    
    //Inside of your MVC bookController class:
    public function displayBook($id)
    {
        $book = Book::find($id);
        $app->view->set("book", $book);
        $app->view->render("form_book.php");
    }
    

    【讨论】:

    • 谢谢,但为什么你的 MVC bookController 类中有 View?我相信控制器不应该在其中包含视图——这就是前端控制器的用途——在其中包含视图、模型和控制器。
    • 嗯,MVC 控制器至少需要知道视图,这样它才能修改它并将信息提交给视图。视图本身存储在 $app-object 中,因此前端控制器也知道它。然后你可以在任何你想要的地方渲染视图。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-04
    • 2012-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-19
    • 1970-01-01
    相关资源
    最近更新 更多