Php Slim 3渲染控制器
我曾经使用Slim 2,但当我切换到Slim 3时,我在控制器中呈现页面时遇到问题:Php Slim 3渲染控制器,php,slim,Php,Slim,我曾经使用Slim 2,但当我切换到Slim 3时,我在控制器中呈现页面时遇到问题: namespace controller; class Hello { public function index(){ $this->app->render('web/pages/hello.phtml'); } } 这是routes.php中控制器的调用 $app->get('/test3', '\controller\Hello:index'); 这
namespace controller;
class Hello
{
public function index(){
$this->app->render('web/pages/hello.phtml');
}
}
这是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/"
}
}
文件夹“控制器”和“页面”位于同一文件夹“web”中
我得到以下错误:
PHP Notice: Undefined property: controller\Hello::$app
PHP Fatal error: Call to a member function render() on a non-object
我遗漏了什么吗?您如何将控制器操作绑定到路由器?使用类似“Hello::index”或数组('Hello','index')的东西
如果要将应用程序变量用作控制器类中的属性,则需要 首先,必须将渲染器添加到依赖项容器中
$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);
}
$app->get('/test3','\controller\Hello:index');