首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Volt目录无法写入

Volt目录无法写入
EN

Stack Overflow用户
提问于 2013-10-10 09:26:39
回答 9查看 19.3K关注 0票数 6

我所犯的错误是

代码语言:javascript
复制
Warning: Phalcon\Mvc\View\Engine\Volt\Compiler::compileFile(../app/views/index/index.phtml.php): failed to open stream: Permission denied in /Users/mattstephens/Sites/magpie/public/index.php on line 26 Phalcon Exception: Volt directory can't be written

我已经在我的引导程序中声明了volt引擎的使用情况如下

代码语言:javascript
复制
$view->registerEngines(array(
      '.phtml' => 'Phalcon\Mvc\View\Engine\Volt'
    ));

我的代码中提到的第26行指向了下面所示的应用程序句柄函数

代码语言:javascript
复制
echo $application->handle()->getContent();

这是与权限相关的事情还是因为缺少目录?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2013-10-10 13:22:21

除非为Volt指定不同的文件夹来编译其模板,否则将使用视图文件所在的文件夹创建相关的已编译文件。

在将服务注册为这样时,可以通过设置适当的选项来更改此行为:

代码语言:javascript
复制
use \Phalcon\Mvc\View as PhView;
use \Phalcon\Mvc\View\Engine\Volt as PhVolt;

...

public function initView($options = array())
{
    $config = $this->di['config'];
    $di     = $this->di;

    $this->di['volt'] = function ($view, $di) use ($config) {

        $volt = new PhVolt($view, $di);
        $volt->setOptions(
            array(
                'compiledPath'      => $config->app_volt->path,
                'compiledExtension' => $config->app_volt->extension,
                'compiledSeparator' => $config->app_volt->separator,
                'stat'              => (bool) $config->app_volt->stat,
            )
        );

        return $volt;
    };

    /**
     * Setup the view service
     */
    $this->di['view'] = function () use ($config, $di) {

        $view = new PhView();
        $view->setViewsDir($config->app_path->views);
        $view->registerEngines(array('.volt' => 'volt'));

        return $view;
    };
}

$config将存储所需的所有信息。通过使用compiledPath,您可以指示Volt在那里编译模板,然后将它们提供给前端。该文件夹需要为运行您的web服务器www-data或其他并且可以位于您的公用文件夹之外的用户编写。

我通常使用的文件结构是:

代码语言:javascript
复制
app
    \controllers
    \models
    \views
public
    \js
    \css
    \img
var
    \volt
    \logs
    \config
    \cache
票数 7
EN

Stack Overflow用户

发布于 2015-12-08 15:28:12

将volt文件权限(在应用程序/缓存中)更改为777 .Its,运行良好

票数 6
EN

Stack Overflow用户

发布于 2016-07-23 23:27:27

与这里的其他几个答案相反,不要仅仅将权限设置为0777并假装一切正常,这是完全荒谬的。您的服务器需要写入缓存目录中的volt文件夹。

您可能需要先创建文件夹. sudo mkdir cachesudo mkdir cache/volt。然后用服务器运行的用户名设置该文件夹。

注意:根据您的配置,cache文件夹可能位于项目根目录,而不是位于app__中。

例如,如果您的服务器在名为“www-data”的用户的权限下启动(这是最常见的),在创建正确的文件夹结构之后,下面的命令将修复您的问题:sudo chown www-data:www-data -R cache

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19291928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档