在laravel 5上运行make:request时出错

use*_*215 5 laravel

在laravel文档上运行示例代码php artisan make:request StoreBlogPostRequest以创建新的验证控制器时,我收到以下错误

[RuntimeException]                       
Unable to detect application namespace.  
Run Code Online (Sandbox Code Playgroud)

我不确定是什么问题,我做了一些搜索,但没有真正解释这个错误.有任何想法吗?

Ala*_*orm 9

在Laravel 5中,"应用程序"是存储在文件夹中的单个命名空间下的PHP文件集合 app/

默认情况下,在大多数来自文档的Laravel 5示例代码中,此命名空间是App\.例如,应用程序中的一个控制器可能如下所示.

namespace App\Http\Controller;
class MyController
{
    //...
}
Run Code Online (Sandbox Code Playgroud)

当Laravel生成代码时(即当您使用该make:request命令时),它需要知道该应用程序命名空间是什么(可以使用该artisan app:name命令更改命名空间).出于某种原因,在您的系统中,Laravel 5无法检测命名空间.

如果您查看检测命名空间的Laravel 5核心代码部分

#File: vendor/laravel/framework/src/Illuminate/Console/AppNamespaceDetectorTrait.php
protected function getAppNamespace()
{
    $composer = json_decode(file_get_contents(base_path().'/composer.json'), true);

    foreach ((array) data_get($composer, 'autoload.psr-4') as $namespace => $path)
    {
        foreach ((array) $path as $pathChoice)
        {
            if (realpath(app_path()) == realpath(base_path().'/'.$pathChoice)) return $namespace;
        }
    }

    throw new RuntimeException("Unable to detect application namespace.");
}
Run Code Online (Sandbox Code Playgroud)

您将看到Laravel通过查看您的composer.json文件并查找第一个有效的psr-4命名空间来检测命名空间.

我的猜测是你的composer.json文件缺少命名空间

"autoload": {
    "classmap": [
        "database"
    ],
    "psr-4": {
        "App\\": "app/"
    }
},
Run Code Online (Sandbox Code Playgroud)

重新加入,你会很高兴.