如何创建一个操作实例的辅助函数?

时间:2016-07-28 17:14:13

标签: php

我正忙着尽可能多地学习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文件'但是我的请求超出了对象范围......

...所以我有点困惑,我如何在面向对象的代码中实现一个平面旧的辅助函数?

非常感谢提前。

2 个答案:

答案 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来自哪里,所以显然你会想要那个。您可以将其作为参数传递,但如果可能的话,最好在函数内初始化它。