我使用控制器/方法作为应用程序路由的回调。
例如:
$app->get('/user/login', array('User', 'login'));
这是示例User
类:
Class User {
public function login() {
print 'Login page.';
}
}
如何使$app
变量在所有类中自动可用?
我知道我可以使用getInstance()
方法来获取它,但是我每次都需要手动调用它。
谢谢!
创建一个提供公共元素的基类,并在每个控制器中扩展该基类。这是一个示例基类:
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');
编辑:对不起,只看到你关于以后不想调用 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();
}
}