0

我试图扩展我对 php 中关注点分离的知识。我已经练习了一年多,我想并尝试编写自己的 mvc 框架进行练习。现在我再次陷入路由以及如何启动 MVC 三元组的问题。

我有这个uri我想要映射的,所以我可以确定使用哪个controller和哪个view

$uri = filter_var(rtrim(filter_input(INPUT_GET, 'url', FILTER_SANITIZE_STRING), '/'), FILTER_SANITIZE_URL);

假设这段代码位于我的bootstrap.php文件中,作为入口点。

在阅读Tom Butler 的博客时,我意识到很多事情,比如视图应该可以访问模型,但不完全viewmodel是,使用 a 更好,或者只是一个模型。

我遇到了他 IOC或他的 Dependency Injection Container并有兴趣尝试它。

那篇文章中缺少的是调度部分,我非常有兴趣学习,我尝试了几件事让它工作但无济于事。

我想实现这一点,因为我想要一次调用controllercan 在其视图中共享依赖关系,例如

$route = $router->getRoutes(); // maybe something that return a Route object with Controller, and View object that has already shared dependecies.

我不知道我对上述段落的理解是否正确以及是否真的可以用于我的路由。如果我错了,请纠正我。

真正的问题是调度员会是什么样子?如果我要使用convention over configuration先生的东西。汤姆,我应该在我的引导程序中单独声明路线吗?像这些

$dice->addRule('$route_user/edit', $rule);
$dice->addRule('$route_user/delete', $rule);
...

我想知道我是否可以这样做:

$controller->method($params)

在我确定了我需要的视图和控制器之后。

4

1 回答 1

0

我不确定这个答案是否是你想要的,但如果我在你的地方我会这样做,它将更加restFull,并且更加“约定优于配置”:

  1. 使用 http 动词进行编辑、删除...
  2. 使用标准方式处理您的网址:“article/”、“article/2” 其中 article 是您的控制器名称和您的视图名称
  3. 对简单路由使用简单的数组树:

    $bootstrap=[ ... "routes"=>[ "myFirstCategory"=>[ "art"=>"article", ... ], "mySecondCategory"=>[ ... 这样,myFirstCategory/art 可以重定向到文章控制器和视图,具有处理路由树的递归函数

  4. 在此树中,您可以将回调规则用于复杂规则(该回调必须由路由树的递归函数处理:

    ... "art"=>function($myContainer){...return ['view'=>$view,'controller'=>$controller,'id'=>$id...];}.. .

这只是一些让它更易于使用的想法......

于 2013-07-28T09:34:33.150 回答