phpSlim twg-view无法正常工作

时间:2016-11-02 11:35:18

标签: php slim

我在瘦框架应用程序中遇到错误。我不知道为什么树枝视图不起作用。 twig-view在供应商目录中下载。 这是我的索引文件

<?php
require  __DIR__ . '/vendor/autoload.php';
// Settings
$config = [
    'settings' => [
        'displayErrorDetails' => true,
        'addContentLengthHeader' => false,
    ],
];

$app = new \Slim\App($config);

// Get container
$container = $app->getContainer();

// Register component on container
$container['view'] = function ($container) {
    $view = new \Slim\Views\Twig( __DIR__ . '/resources/views', [
        'cache' => false
    ]);

    // Instantiate and add Slim specific extension

    $view->addExtension(new Slim\Views\TwigExtension(
    $container['router'],
    $container['request']->getUri()

    ));

    return $view;
};

// Home
$app->get('/home','index');



function index($request, $response, $args)
{
   return $this->view->render($response, 'home.twig'); // here is the error 
}

$app->run();

我收到错误$ this this关键字 错误详情

Details

Type: Error
Message: Using $this when not in object context
File: C:\xampp\htdocs\slim\api\index.php
Line: 42

2 个答案:

答案 0 :(得分:1)

如果没有闭包

,则无法使用此功能
  

如果使用Closure实例作为路由回调,则闭包的状态将绑定到Container实例。这意味着您可以通过$this关键字访问Closure内部的DI容器实例。

(参考:http://www.slimframework.com/docs/objects/router.html

将闭包分配给变量

时,可以将其分开
$indexRoute = function ($request, $response, $args)
{
    return $this->view->render($response, 'home.twig'); // here is the error 
}

$app->get('/home', $indexRoute);

答案 1 :(得分:0)

您正在宣传路线,请尝试

super.getClass()

您应该调用// This callback will process GET request to /index URL $app->get('/index', function($request, $response, $args) { return $this->view->render($response, 'home.twig'); }); 方法来注册路由,而不是声明一个函数。

修改

也可以从回调中“分离”路由声明。您可以创建单独的类(MVC模式中的a-la控制器),如下所示:

$app

我建议你阅读appropriate section of the documentation。这很简单。