我正忙着尽可能多地学习php框架。
目前我有一个充满路线的文件。路线采用这种一般形式。
$bootstrap->router->add('/home', ['controller' => 'home', 'action' => 'index']);
因此,'routes'文件不是一个类,它只是我在$bootstrap = new Bootstrap($router);
下面的index.php页面中包含的文件。
正如您所看到的,要添加路由,我将其添加到实例化的 $ bootstrap 对象,该对象本身有一个实例化的 - >路由器对象,我在其中调用'add()'方法。
现在我想通过写这样的东西来更容易地添加路线...
route('/home', ['controller' => 'home', 'action' => 'index']);
问题
究竟如何解决这一问题尚不清楚......我甚至不确定这是否已经完成。我试过制作一个'helpers / RoutesHelper文件'但是我的请求超出了对象范围......
...所以我有点困惑,我如何在面向对象的代码中实现一个平面旧的辅助函数?
非常感谢提前。
答案 0 :(得分:2)
如果您愿意在$
行的开头添加route(...
:
$route = function($path, $options) use ($bootstrap) {
$bootstrap->router->add($path, $options);
}
会奏效。
$bootstrap
否则将引导对象引入路由函数会很脏:
function route($path, $options) {
global $bootstrap; // <-- i don't like this
$bootstrap->router->add($path, $options);
}
数组中的您也可以在文件中创建一个数组,如:
$routes = array()
$routes['/home'] = ['controller' => 'home', 'action' => 'index'];
// ... more routes ...
并在主程序中循环遍历该数组:
foreach($routes as $path => $options) {
$bootstrap->router->add($path, $options);
}
这些是我想到的三种解决方案......
答案 1 :(得分:1)
喜欢这个
if(!function_exists( 'route' ) ){
function route( $path, $params ){
$bootstrap = ''; //?
$bootstrap->router->add($path, $params);
}
}
当然我不知道$ bootstrap来自哪里,所以显然你会想要那个。您可以将其作为参数传递,但如果可能的话,最好在函数内初始化它。