Laravel 报错: Declaration of XXX解决办法

在另一台机器上拉取最新代码后,进入网站后台,发现页面空白,使用 php artisan cache:clear, php artisan clear-compiled 等清除缓存和编译文件后还是不行,打开 PHP 错误日志查看,发现报错:

Fatal error: Declaration of Illuminate\\Auth\\SessionGuard::basic() must be compatible with that of Illuminate\\Contracts\\Auth\\SupportsBasicAuth::basic() in /usr/share/nginx/html/tanteng.me/vendor/laravel/framework/src/Illuminate/Auth/SessionGuard.php on line 17

在网上找到一个可行的解决办法,修改 composer.json 文件:

ps://oddyzfr8z.qnssl.com/wp-content/uploads/2016/09/laravel-composer-json-post-install.png" />

将 clear-compiled 替换,具体修改如下:

PHP

"post-install-cmd": [
-       "php artisan clear-compiled",
+       "Illuminate\\Foundation\\ComposerScripts::postInstall",
        "php artisan optimize"
],
"post-update-cmd": [
-        "php artisan clear-compiled",
+        "Illuminate\\Foundation\\ComposerScripts::postUpdate",
         "php artisan optimize"
]

再次执行 sudo composer update 之后,再执行一次 sudo composer dump-autoload 就恢复正常了。

顺便我们来看看这两个方法,文件路径 laravel/framework/src/Illuminate/Foundation/ComposerScripts.php:

class ComposerScripts
{
    /**
     * Handle the post-install Composer event.
     *
     * @param  \Composer\Script\Event  $event
     * @return void
     */
    public static function postInstall(Event $event)
    {
        require_once $event->getComposer()->getConfig()->get('vendor-dir').'/autoload.php';
 
        static::clearCompiled();
    }
 
    /**
     * Handle the post-update Composer event.
     *
     * @param  \Composer\Script\Event  $event
     * @return void
     */
    public static function postUpdate(Event $event)
    {
        require_once $event->getComposer()->getConfig()->get('vendor-dir').'/autoload.php';
 
        static::clearCompiled();
    }
 
    /**
     * Clear the cached Laravel bootstrapping files.
     *
     * @return void
     */
    protected static function clearCompiled()
    {
        $laravel = new Application(getcwd());
 
        if (file_exists($compiledPath = $laravel->getCachedCompilePath())) {
            @unlink($compiledPath);
        }
 
        if (file_exists($servicesPath = $laravel->getCachedServicesPath())) {
            @unlink($servicesPath);
        }
    }
}

这两个方法都是清除 Laravel 的编译文件,以后可以使用这两个方法作为 composer.json 中安装和更新依赖的脚本命令。

时间: 2024-09-23 19:15:13

Laravel 报错: Declaration of XXX解决办法的相关文章

mac 下编译 ffmpeg的 libaacplus-2.0.2 总是报错求大神解决办法,谁能教我再mac下编译ffmpeg也行

问题描述 mac 下编译 ffmpeg的 libaacplus-2.0.2 总是报错求大神解决办法,谁能教我再mac下编译ffmpeg也行 make[2]: Nothing to be done for `all'. Making all in frontend gcc -DHAVE_CONFIG_H -I. -I.. -I../include -I../src -g -O2 -c -o main.o main.c main.c:89:46: warning: data argument not

c# excel保存路径中带有[ ]报错 求大神解决办法

问题描述 "System.Runtime.InteropServices.COMException"类型的未经处理的异常在excel.exe中发生其他信息:无法访问文件.请尝试下列方法之一:•确认所指定的文件夹已存在.•确认文件所在的文件夹不是只读的.•确认给出的文件名不包含下列字符:<>?[]:|或*.•确认文件/路径名长度不超过218个字符.stringfileName="d:\[1]\test.xlsx";//创建Excel文档Microsoft.

Android Studio报错UTF-8+BOM的解决办法

今天在用Android studio运行程序的时候,突然报了一种从未见过的错误,如图: 然后我就clean和build,结果都不好使,程序仍然报错,我请教了身边的大神,结果也没见过这种奇葩的情况,最后通过查询网上的解决办法及自己的总结,现整理出一套完美的解决方案. 错误原因,代码编码格式错误,平常我们都用UTF-8格式,之所以报上述错误,是因为编码格式变成了UTF-8+BOM格式,而以前我们编写Android程序都是用eclipse来写,eclipse可以自动把UTF-8+BOM格式转换成UTF

安装MYSQL-PYTHON包报错mysql_config not found解决办法

使用pip install MySQL-python的方式安装,遇到以下几个问题: 1.提示错误EnvironmentError: mysql_config not found 这是因为本机是Mac OSX系统,并且装的MySQL是MAMP集成环境中的,实际上mysql_config这个文件是存在的,但是默认包里面的路径有问题,可以重新装一个MySQL到系统默认位置,不过既然已经有了MySQL不想重复装. 解决办法是从pypi官网下载一个MySQL-python包,然后修改其中的setup_po

apache网站报错Internal Server Error解决办法

Internal Server Error The server encountered an internal error or misconfiguration and was unable to complete your request. Please contact the server administrator at admin@star.com to inform them of the time this error occurred, and the actions you

win8安装office2010失败报错代码2705怎么解决

win8安装office2010失败报错代码2705怎么解决   因为Windows 8上不支持Office 的中文输入法编辑器,即字体有冲突,此类情况仅出现在 Windows 8 64Bit 消费者预览版系统上. 解决方法: 1.使用热键组合"WIN+X"调出快捷菜单,选择"控制面板"并进入,在控制面板的系统和安全中选择"Windows 更新"下的"安装可选更新",如下图所示: 2.点击进入以后,会显示如下图所示: 3.进入

Win7系统IE9浏览器出现报错停止工作怎么解决

  Win7系统IE9浏览器出现报错停止工作怎么解决         首先要排除出是否加载项导致的问题,我们可以先以无加载项模式启动IE浏览器,若在该模式下IE使用正常,则可以确认浏览器崩溃为加载项所致,接下来只需要找出问题加载项.下面小编就向大家分享一个如何排除问题加载项的方法,以后便可轻松解决IE崩溃的问题. 具体解决方法如下: 1.使用IE浏览器登陆邮箱的过程中出现报错了,当时弹出的报错如下截图; 2.去事件查看器内寻找是否有重要线索,IE浏览器作为Windows不可分割一部分,IE出错在

java定时器 run方法怎么返回值 我要返回result 代码里一直报错 晚生跪求解决

问题描述 java定时器 run方法怎么返回值 我要返回result 代码里一直报错 晚生跪求解决 public VirementResultInfo queryTransaction( final String bank, final TransactionInfo transactionInfo) { // final VirementResultInfo result = null; TimerTask task = new TimerTask() { @Override public v

eclipse报错-Eclipse报错,不知道怎么解决

问题描述 Eclipse报错,不知道怎么解决 请教各位,有谁知道这个错误怎么解决?谢谢 解决方案 启动配置引用不存在的项目Hello 在properites里面把错误的项目删了 应该就好了 解决方案二: 对于更新androidSDK后,eclipse报错ADT问题的解决解决eclipse报错: CreateProcess error=87