首页 > 解决方案 > GRAV git-sync 插件更新崩溃网站,有人遇到/解决了吗?

问题描述

我一直将 GRAV 用作小型实验站点的 CMS。我最近更新了 git-sync 插件,突然卡住了一个只产生错误的网站,无法进入管理 gui(对该网站的所有 Web 访问都崩溃并出现相同的错误),以降级 git-sync 模块,或者就此而言,如果有修复,升级 git-sync 插件。

我是一名几十年来对 Web 开发并没有真正考虑过的开发人员(我的,它是如何改变的),所以我必须提前承认一些事情。我对php一无所知,如果我不需要的话,我真的不在乎。

我收到的消息(如下)表明这是一个 php 错误。如果这是一个简单的语法修复,请提醒我。

如果您对使用 git-sync 插件升级或降级、恢复 git-sync 或任何其他提示的“cli”方式有任何建议,请提出建议。我将深入研究更多文档,看看我是否最终回答了我自己的问题。

/[pathToUserHome]/grav/user/plugins/git-sync/classes/GitSync.php

        */

        $paths = ['.'];

        if (version_compare($version, '2.0', '<')) {
            $add .= ' --all';
        }

        return $this->execute($add . ' ' . implode(' ', $paths));
    }

    public function commit($message = '(Grav GitSync) Automatic Commit')
    {
        $authorType = $this->getGitConfig('author', 'gituser');
        if (defined('GRAV_CLI') && in_array($authorType, ['gravuser', 'gravfull'])) {
            $authorType = 'gituser';
        }

        // get message from config, it any, or stick to the default one
        $message = $this->getConfig('git', null)['message'] ?? $message;

        // get Page Title and Route from Post
        $pageTitle = $_POST['data']['header']['title']??'NO TITLE FOUND';
        $pageRoute = $_POST['data']['route']??'NO ROUTE FOUND';

        ...

 Arguments
    1) "syntax error, unexpected '?'"

 Whoops\Exception\ErrorException…
     /user/plugins/git-sync/classes/GitSync.php : 223

     $message = $this->getConfig('git', null)['message'] ?? $message;

标签: phpgitgrav

解决方案


您的新版 GRAV 正在使用 php7.0 功能,例如??运算符,即Null coalescing. 尝试升级您的 php 版本以支持新功能,或降级 GRAV。

制作兼容版本也是一种选择,但这可能是耗时的想法。但是,如果您的问题仅在此特定文件中,您可以替换:

// $message = $this->getConfig('git', null)['message'] ?? $message;
$message = isset($this->getConfig('git', null)['message']) ? $this->getConfig('git', null)['message'] : $message;
// $pageTitle = $_POST['data']['header']['title']??'NO TITLE FOUND';
$pageTitle = isset($_POST['data']['header']['title']) ? $_POST['data']['header']['title'] : 'NO TITLE FOUND';
// $pageRoute = $_POST['data']['route']??'NO ROUTE FOUND';
$pageRoute = isset($_POST['data']['route']) ? $_POST['data']['route'] : 'NO ROUTE FOUND';

推荐阅读