【发布时间】:2015-10-11 14:42:42
【问题描述】:
我正在构建自己的 MVC 框架(以改进我的 PHP),但我不知道如何处理好的做法。
在我的路由器中,我有一个方法可以通过使用路由名称和参数来创建链接(该方法返回格式正确的 url),所以在我的控制器中我可以使用类似的东西:
//inside an action of any of my controllers
$router = Router::getInstance(); //the router is a Singleton
$url = $router->createUrl('articleReadOne', array(65, 'matrix')); //$url = "article/read/65-matrix"
$this->redirectTo($url);
或者在我看来:
//inside a view
<?php $router = Router::getInstance(); ?>
<a href="<?php echo $router->createUrl('article-read', array(65, 'matrix')); ?>"> Click me </a>
但我可以在网上看到使用 Singleton 是一种不好的做法(即使对于数据库类)。
我确实需要从我的控制器内部和我的视图内部访问我的 createUrl() 方法,但是如果我不使用单例路由器类,我如何将我的路由器“注入”到我的控制器并成为能用吗? 在这种情况下使用 Singleton 真的很糟糕吗?
感谢您的帮助。
【问题讨论】:
-
控制器前面有什么样的路由?一个前端控制器,所有请求都被重定向到索引并从那里手动路由,还是其他方案?
-
您好,所有请求都被重定向到 index.php,如果 URL 与我的路由之一匹配,我会查看我的路由集合。如果是这种情况,我会调用相应的控制器和相应的操作。
-
那么您可以在该操作调用中注入路由器..
$controller->listAction($router, $otherStuff)或类似