我正在使用控制器/方法作为应用程序路由的回调。
E.g:
$app->get('/user/login', array('User', 'login'));
以下是示例User
类:
Class User {
public function login() {
print 'Login page.';
}
}
如何在所有课程中自动使$app
变量可用?
我知道我可以使用getInstance()
方法获取它,但我需要每次都手动调用它。
谢谢!
答案 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();
}
}