超薄3渲染在控制器中

时间:2016-01-14 16:40:48

标签: php slim

我曾经使用Slim 2但是当我切换到Slim 3时,我在控制器中渲染页面时遇到了问题:

这是routes.php

中控制器的调用
$app->get('/test3', '\controller\Hello:index');

这是我的控制者:

namespace controller;

class Hello
{
    public function index(){
        $this->app->render('web/pages/hello.phtml');
    }
}

对于控制器,我只是将它添加到我的composer.json:

"autoload": {
    "psr-0": {
        "controller": "web/"
    }
}

文件夹'controller'和'pages'位于同一文件夹'web'中 我收到以下错误:

PHP Notice:  Undefined property: controller\Hello::$app
PHP Fatal error:  Call to a member function render() on a non-object

我错过了什么吗?

2 个答案:

答案 0 :(得分:1)

首先,您必须将渲染器添加到依赖项容器中。

$container = $app->getContainer();

$container['renderer'] = function ($c) {
    return new Slim\Views\PhpRenderer(__DIR__ . '/../templates/');
};

Slim会将容器实例传递给控制器​​构造函数。将其保存在实例变量中:

private $container;

public function __construct($container) {
    $this->container = $container;
}

然后你可以从容器中获取渲染器并返回如下响应:

public function index($request, $response, $args) {
    $this->container->renderer->render($response, 'hello.phtml', $args);
}

答案 1 :(得分:0)

如何将控制器操作绑定到路由器?使用" Hello :: index"或数组('你好','索引')?

如果要将应用程序变量用作控制器类中的属性,则需要dependency injection