Slim PHP:在课堂上提供$ app

时间:2013-04-23 14:33:10

标签: php class slim

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

E.g:

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

以下是示例User类:

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

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

谢谢!

2 个答案:

答案 0 :(得分: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!
}

更新以参数化路线:

在BaseController中:

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

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

$user = new User('/user/login');

答案 1 :(得分:1)

编辑:抱歉,之后只看到了关于不想调用getInstance()的说明。在这两种情况下,我都会将我的初步答案作为参考。

您只需调用getInstance()方法:$app = \Slim\Slim::getInstance();

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

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

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

class Foo {
    public function fun($var1, $var2) {
        $app = \Slim\Slim::getInstance();
    }
}