【问题标题】:PHP Fatal error: Class 'App\Providers\ServiceProvider' not found, after I fixed err Laravel migration: unique key is too long,PHP 致命错误:在我修复错误 Laravel 迁移后找不到类“App\Providers\ServiceProvider”:唯一键太长,
【发布时间】:2018-01-28 05:41:26
【问题描述】:

我刚开始学习 Laravel 5.4 并尝试在 Laravel 中迁移用户表。当我运行迁移时,出现此错误:

[Illuminate\Database\QueryException] SQLSTATE[42000]:语法错误或访问冲突:1071 指定的键太长;最大密钥长度为 767 字节

在关注this tutorial之后,我现在又遇到了一个错误:

PHP 致命错误:找不到类“App\Providers\ServiceProvider”

我的迁移代码是

use Illuminate\Support\Facades\Schema;

public function boot()
{
    //
    Schema::defaultStringLength(191);
}

我做错了什么?

【问题讨论】:

  • 您是创建了一个新的服务提供者并将上面的代码放入其中,还是将上面的代码放入了AppServiceProvider 类中?无论哪种方式,您能否发布文件的完整代码并识别它,这可能有助于我们帮助您解决问题。
  • 我的代码在 AppServiceProvider 类中,我的整个代码是...,,,
  • 你的AppServiceProvider 类中是否还有use Illuminate\Support\ServiceProvider; 语句?
  • 不,我将其更改为此代码“使用 Illuminate\Support\Facades\Schema;”
  • 不要替换任何东西,只是添加文章中的新东西。所以也保留之前的代码。

标签: php


【解决方案1】:

问题是您缺少标识ServiceProvider 类所在位置的use 语句。由于AppServiceProvider 类扩展了ServiceProvider,但没有use 语句,PHP 假定该类可以在与AppServiceProvider 相同的命名空间中找到。这就是它找不到\App\Providers\ServiceProvider 的原因——因为\App\ProvidersAppServiceProvider 类的命名空间。

试试这个

<?php

namespace App\Providers;

use Illuminate\Support\Facades\Schema;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        Schema::defaultStringLength(191);
    }

    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }
}

【讨论】:

  • 很好的解释
  • 非常感谢@stratedge,它只能通过添加'use Illuminate\Support\ServiceProvider;'来工作使用我的代码,我做错的是改变而不是添加'use Illuminate\Support\Facades\Schema;'再次感谢您解决问题。
猜你喜欢
  • 2019-05-22
  • 2015-02-04
  • 2014-12-27
  • 2014-08-16
  • 1970-01-01
  • 2021-02-19
  • 1970-01-01
  • 1970-01-01
  • 2015-03-20
相关资源
最近更新 更多