Volt目录无法写入

Mat*_*ens 6 php phalcon volt

我得到的错误是

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
Run Code Online (Sandbox Code Playgroud)

我已经在我的引导程序中声明了伏特引擎的使用情况

$view->registerEngines(array(
      '.phtml' => 'Phalcon\Mvc\View\Engine\Volt'
    ));
Run Code Online (Sandbox Code Playgroud)

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

echo $application->handle()->getContent();
Run Code Online (Sandbox Code Playgroud)

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

Nik*_*los 7

除非您为Volt指定其他文件夹以编译其模板,否则将使用视图文件所在的文件夹来创建相关的编译文件.

您可以通过在注册服务时设置正确的选项来更改此行为:

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;
    };
}
Run Code Online (Sandbox Code Playgroud)

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

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

app
    \controllers
    \models
    \views
public
    \js
    \css
    \img
var
    \volt
    \logs
    \config
    \cache
Run Code Online (Sandbox Code Playgroud)


小智 6

将伏特文件权限(内部应用程序/缓存)更改为777.Its正常工作


Aar*_*son 5

与此处的其他几个答案相反,不要只是不知不觉地设置0777的权限并假装一切都没问题,这完全是荒谬的.您的服务器需要写入缓存目录中的volt文件夹.

您可能需要先创建该文件夹. sudo mkdir cache,和sudo mkdir cache/volt.然后使用服务器运行的用户名填充该文件夹.

注意:根据您的配置,该cache文件夹可能位于项目根目录而不是内部app.

例如,如果您的服务器在名为"www-data"的用户(最常见)的权限下启动,则在创建正确的文件夹结构后,以下命令将解决您的问题: sudo chown www-data:www-data -R cache