【发布时间】:2016-10-14 14:56:09
【问题描述】:
我正在更新我编写的 PHP 框架。它过去只是使用默认行为进行路由。例如考虑请求转到domain.com/package/controller/method...的情况。
$url = ["package", "controller", "method"];
//Check if package exists...
//Check if controller exists in package...
//Check if method exists in controller...
这一切都很好,而且效果很好。但是,我想为我的路由器添加一些额外的功能。该功能是能够定义自定义路由,并传递一个匿名函数来做任何你想做的事情。
但是,假设请求不匹配任何用户定义的路由,我想使用我现在拥有的默认功能来检查是否还有其他可能的路由。这样我就可以用新框架更新旧项目而不会破坏它们,此外......我只是喜欢这种默认行为,因为大多数时候路由并不那么复杂,定义路由对我来说就像违反 DRY。
问题是我不想将用户定义的路由作为数组传递给对象构造函数。相反,我希望用户将它们作为基础应用程序对象上的方法调用,类似于 laravel 或 express 的处理方式。
问题是我希望在用户定义的路由之前没有检查过之后进行默认路由检查。这个准代码可能会帮助你理解我的意思......
class App
{
__construct
{
//Check Default Routing
}
private function get()
{
//Get Request
}
private function post()
{
//Post Request
}
private function put()
{
//Put Request
}
private function delete()
{
//Delete Request
}
}
app::get();
在上述情况下,默认路由将在调用用户定义的路由之前发生。我查看了at the PHP consrtuctor/destructor page 并了解了__destruct。但是,在阅读 this question 之后,我有点不确定这是否可行。
PHP.net 说...
只要没有其他方法,就会调用析构方法 对特定对象的引用,或在关机期间以任何顺序引用 顺序。
该解释的第一部分听起来正是我想要的。 IE。一旦在应用程序对象上调用了所有方法,我们将运行__destruct 函数,该函数将检查用户定义的路由是否有效,如果没有,则检查默认路由系统是否产生任何结果。
问题是我不确定这是否是不好的做法,或者根本行不通。我可以要求一个文件,设置我的控制器,然后从__destruct 中调用该控制器上的方法吗?是否存在会影响这些控制器中的代码的限制?假设以这种方式使用__destruct 时出现问题,我的替代方案是什么,请记住我不喜欢这两种解决方案...
- 让用户在脚本末尾调用默认路由作为方法。
- 将路由作为数组传递给构造函数。
【问题讨论】:
标签: php url-routing destructor