1

我使用控制器/方法作为应用程序路由的回调。

例如:

$app->get('/user/login', array('User', 'login'));

这是示例User类:

Class User {
  public function login() {
    print 'Login page.';
  }
}

如何使$app变量在所有类中自动可用?
我知道我可以使用getInstance()方法来获取它,但是我每次都需要手动调用它。

谢谢!

4

2 回答 2

3

创建一个提供公共元素的基类,并在每个控制器中扩展该基类。这是一个示例基类:

class BaseController { 
   $app = new YourApp();

    function __construct() {
           $this->app->get('/user/login', array('User', 'login'));

}

然后,您可以扩展您的控制器以访问该类$app

class User extends BaseController {

    function yourFunction() {
        // $this->app is already set!
}

更新以参数化路线:

在基本控制器中:

function __construct($route) {
       $this->app->get($route, array('User', 'login'));

然后在初始化类时包含路由参数:

$user = new User('/user/login');
于 2013-04-23T14:35:58.383 回答
1

编辑:对不起,只看到你关于以后不想调用 getInstance() 的注释。无论哪种情况,我都会在此处留下我的初始答案作为参考。

您可以简单地调用 getInstance() 方法:$app = \Slim\Slim::getInstance();

自 2013 年 11 月以来,您现在可以通过称为“类控制器”的功能使用控制器类实例作为 Slim 应用程序路由(及其参数)的回调:

$app->map('/foo/:bar/:baz', '\Foo:fun')->via('GET', 'POST');

在回调类实例中获取 $app 的实例非常简单:

class Foo {
    public function fun($var1, $var2) {
        $app = \Slim\Slim::getInstance();
    }
}
于 2014-10-15T12:23:51.443 回答