【问题标题】:Phalcon view not loadedPhalcon 视图未加载
【发布时间】:2017-01-14 20:10:43
【问题描述】:

我正在尝试在 PhalconPHP (v 2.0.13) 中加载模板,但即使是最简单的示例似乎也不起作用。在此示例中,我正在尝试访问 http://www.mysite.dev.fb/forms/。这是我的路由器:

$router->add(
    '/forms/',
    [
            "namespace" => "Render\\Controller",
            "controller" => "index",
            "action" => "forms",
    ],
    ['GET']

);

路由有效,或至少到达操作中的代码(vardumps 等)。

这是我的控制器动作变体。

变体 1

public function formsAction()
{
}

在这种情况下,应该加载位于 app/views/index/forms.volt 的模板(我有一个扩展名为 .phtml 的文件副本,用于调试目的),对吗?错误,显示一个空白屏幕,errorlog中没有错误。

变体 2

然后,我尝试选择视图,如下所示:

$this->view->setViewsDir(__DIR__ . '/../views/');
$this->view->pick('forms/contact');

文件 app/views/forms/contact.volt 也存在,具有完全权限。 Vardumping $this->view->getContent() 返回 null 并且结果再次是一个没有任何错误的空白屏幕。

变体 3

无奈之下,我尝试像这样直接渲染模板(在本示例中,我使用的是默认的 Phalcon 索引/索引模板):

$this->view->start();
$this->view->render('index', 'index'); //Pass a controller/action as parameters if required
$this->view->finish();

唯一的区别是现在 vardumping $this->view->getContent() 返回一个空字符串,而不是 null

这就像禁用了自动渲染,但下面一行返回 false(应该如此):

var_dump($this->view->isDisabled());

我没有想法,有人可以帮忙吗?如果我忘记包含某些内容,请回复,我会包含它。

【问题讨论】:

  • 您是否正确设置了视图组件?这是我在服务中注册的视图组件:pastebin.com/SdX121d8。还要确保 Phalcon 对缓存文件夹具有 r/w 权限。检查 PHP 日志
  • 我的猜测是setViewsDir(__DIR__ . '/../views/') 没有设置正确的路径。您在哪里注册 View 服务?在 index.php 文件中?如果视图位于 /app/views/ 中,而您的 index 文件位于 /public/index.php 中,则路径应为 __DIR__ . '../app/views/'
  • 是的,我的 Volt 引擎定义中的某些内容看起来很可疑,我添加了 Luke 示例中的 phtml 行,是的,.phtml 模板已正确加载。谢谢,我会在有任何进展时报告(无论是积极的还是我再次陷入困境)。
  • 很高兴听到这个消息。我将添加我的示例代码作为答案,以便在 pastebin 被关闭的情况下有人可以找到答案。

标签: php phalcon volt phalcon-routing


【解决方案1】:

您绝对应该检查您的 PHP 日志中是否存在 PHP 错误。我也怀疑你的伏特声明可能是错误的。这是一个在我使用的服务中声明依赖注入视图组件的工作示例:

$di->setShared('view', function () use ($di,$config) {
    $view = new View();
    $view->setViewsDir($config->application->viewsDir); // path to directory with views, loaded from config in this case   
    $view->registerEngines(array(
        '.volt' => function ($view, $di) use ($di, $config) {
            $volt = new VoltEngine($view, $di); 
            $volt->setOptions(array(
                'compiledPath' => $config->application->cacheDir, // path to cache dir, loaded from config in this case
                'compiledSeparator' => '_'
            ));          
            return $volt;
        },
        '.phtml' => 'Phalcon\Mvc\View\Engine\Php'
    ));
    return $view;
});

确保您的网络服务器有权读取缓存目录的视图和 R/W 权限。希望对你有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-25
    • 2012-08-23
    • 2020-12-06
    • 2019-02-19
    • 2015-12-25
    • 2013-01-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多