【问题标题】:Why does my app crash when I change my namespace?当我更改命名空间时,为什么我的应用程序会崩溃?
【发布时间】:2015-06-17 15:34:42
【问题描述】:

我正在按照Easy Laravel 5 一书中给出的材料来学习 Laravel。所以我按照指示创建了应用,当我访问localhost:8000时,我看到了欢迎页面。

然后我给出了改名命令:

php artisan app:name todoparrot

系统以Application namespace set! 响应。但是现在当我重新加载localhost:8000 时,我什么也看不到,并且为应用程序提供服务的终端给了我一长串错误:

PHP Fatal error:  Uncaught exception 'ReflectionException' with message 'Class todoparrot\Console\Kernel does not exist' in /media/common/htdocs/todoparrot/vendor/laravel/framework/src/Illuminate/Container/Container.php:776
Stack trace:
#0 /media/common/htdocs/todoparrot/vendor/laravel/framework/src/Illuminate/Container/Container.php(776): ReflectionClass->__construct('todoparrot\Cons...')
#1 /media/common/htdocs/todoparrot/vendor/laravel/framework/src/Illuminate/Container/Container.php(656): Illuminate\Container\Container->build('todoparrot\Cons...', Array)
#2 /media/common/htdocs/todoparrot/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(613): Illuminate\Container\Container->make('todoparrot\Cons...', Array)
#3 /media/common/htdocs/todoparrot/vendor/laravel/framework/src/Illuminate/Container/Container.php(229): Illuminate\Foundation\Application->make('todoparrot\Cons...', Array)
#4 /media/common/htdocs/todoparrot/vendor/laravel/framework/src/Illuminate/Container/Container.php(773): Illuminate\Container\Con in /media/common/htdocs/todoparrot/vendor/laravel/framework/src/Illuminate/Container/Container.php on line 776

现在我什至无法运行artisan,因为我不断收到同样的错误。知道由于这个极其简单的更改可能会破坏什么吗?

【问题讨论】:

    标签: laravel composer-php laravel-5


    【解决方案1】:

    重命名后试试这个命令:

    composer dump-autoload
    

    Composer 在vendor/composer/ 目录中使用您的命名空间自动加载文件。当您更改任何内容时,您需要清除它并再次生成它,该命令会执行此操作。

    【讨论】:

    • @dotslash 作曲家在 vendor/composer/ 目录中使用您的命名空间自动加载文件。当您更改任何内容时,您需要清除它并再次生成它,该命令会执行此操作。
    • 对我来说,特别是在文件 vendor/composer/autoload_psr4.php 中需要数组中的额外行 'todoparrot\\' => array($baseDir . '/app'),todoparrot 是应用程序的新名称)。
    【解决方案2】:

    如果你运行下面的命令,它会改变所有的命名空间和路径到 todoparrot。在您的情况下,Laravel 未找到“类 todoparrot\Console\Kernel 不存在”。确保命名空间已更改为 todoparrot

    php artisan app:name todoparrot
    

    该命令会修改下面的所有文件

    modified:   app/Commands/Command.php
    modified:   app/Console/Commands/Inspire.php
    modified:   app/Console/Kernel.php
    modified:   app/Events/Event.php
    modified:   app/Exceptions/Handler.php
    modified:   app/Http/Controllers/Auth/AuthController.php
    modified:   app/Http/Controllers/Auth/PasswordController.php
    modified:   app/Http/Controllers/Controller.php
    modified:   app/Http/Controllers/HomeController.php
    modified:   app/Http/Controllers/WelcomeController.php
    modified:   app/Http/Kernel.php
    modified:   app/Http/Middleware/Authenticate.php
    modified:   app/Http/Middleware/RedirectIfAuthenticated.php
    modified:   app/Http/Middleware/VerifyCsrfToken.php
    modified:   app/Http/Requests/Request.php
    modified:   app/Http/routes.php
    modified:   app/Providers/AppServiceProvider.php
    modified:   app/Providers/BusServiceProvider.php
    modified:   app/Providers/ConfigServiceProvider.php
    modified:   app/Providers/EventServiceProvider.php
    modified:   app/Providers/RouteServiceProvider.php
    modified:   app/Services/Registrar.php
    modified:   bootstrap/app.php
    modified:   composer.json
    modified:   config/app.php
    modified:   config/auth.php
    

    app/Console/Kernel.php 中的示例该命令将更改此内容

    namespace App\Console;
    
    protected $commands = [
        'App\Console\Commands\Inspire',
    ];
    

    namespace todoparrot\Console;
    
    protected $commands = [
        'todoparrot\Console\Commands\Inspire',
    ];
    

    如果“App\”路径仍然可用,请检查文件 app/Console/Kernel.php。如果可用,请更改为“todoparrot”。

    我已经尝试运行命令“php artisan app:name todoparrot”。它没有任何问题。我不知道为什么它会向你抛出错误。

    【讨论】:

    • 我进行了全新的应用安装,将名称更改为 parrot,但问题仍然存在。 :( 最大的惊喜是我的 Kernel.php 显示所有设置正确:pastebin.com/CW5wqLr0
    【解决方案3】:

    在命令提示符下使用Ggo到C:\wamp\www\laravel\

    C:\ProgramData\ComposerSetup\bin\composer dump-autoload
    

    而不是

    composer dump-autoload
    

    【讨论】:

      猜你喜欢
      • 2022-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-15
      相关资源
      最近更新 更多