我曾经使用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
我错过了什么吗?
答案 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。