Laravel 5 无法检测应用程序命名空间

62

我刚开始接触 Laravel 5,正在逐渐了解它,目前我真的很困惑错误信息。MVC 对我来说是新事物。

我要做的是为我的网站建立一个博客系统,并下载了一个叫做“Serverfireteam/blog”的包;https://phppackages.org/p/serverfireteam/blog

安装看起来没问题。当我访问http://myhost.com/public/panel/login时,我能够看到登录页面,但是当我尝试登录时,就会出现以下错误:

ErrorException in Application.php line 1119: Unable to detect application namespace. (View: /var/www/html/mpa2/resources/views/vendor/panelViews/dashboard.blade.php)

&&

RuntimeException in Application.php line 1119: Unable to detect application namespace.

有趣的是,之前它运行正常,我可以登录并创建/编辑博客文章。我还能在网站上看到它们。后来,我开始修改视图/模板文件以将博客输出集成到我的网站布局中。

我不知道出了什么问题,我尝试了谷歌搜索寻找解决方案,但没有帮助,有什么建议吗?

6个回答

166

好的,我解决了。我做的是这样解决的:

composer update

给了我以下错误:

[Seld\JsonLint\ParsingException]

"./composer.json" does not contain valid JSON
 Parse error on line 9:
"require-dev
 ---------------------^
 Expected: 'STRING' - It appears you have an extra trailing comma

我打开了composer.json文件,发现在最后一行多了一个逗号:

"require": {
    "php": ">=5.5.9",
    "laravel/framework": "5.1.*",
}

移除了逗号,使其变成这样:

"require": {
    "php": ">=5.5.9",
    "laravel/framework": "5.1.*"
}

问题解决了。


12
感谢您发布这篇文章,更重要的是,感谢您发布您找到的解决方案。这也是我的问题,现在其他人可以快速解决此问题。 - Mike T
谢谢。我曾经遇到同样的问题,用了你的解决方法后解决了。 - Jeremias Araujo
2
几乎遇到了同样的问题,那是composer.json文件中的合并冲突。感谢您提供的解决方案。 - Oniya Daniel
我认为这可能是在将你的分支推送/合并到Git仓库时发生的。 - VishalParkash
谢谢,我也遇到了同样的问题,你的答案解决了我的问题。 - Hedayatullah Sarwary

25

通常,这意味着您的composer.json文件包含无效的JSON。通常是数组末尾多了一个逗号。

尝试运行以下命令,以确定问题的具体位置:

composer diagnose

1
挽救了我的一天!大多数人不知道这个。 - Tharindu Thisarasinghe
2
在我的情况下,你是对的(这是 composer.json 文件中数组末尾多余的逗号)。 - Alberto Suárez

11

Laravel版本:5.8.3

[另一个原因]:composer.json中默认应用程序路径已被修改

默认设置如下:

"psr-4": {
    "App\\": "app/"
 },
如果将它修改为以下内容:
"psr-4": {
    "Core\\": "app/Core/"
 },

使用artisan的make命令会失败,还有其他一些问题。

原因在于https://github.com/laravel/framework/blob/5.3/src/Illuminate/Foundation/Application.php#L296中的app路径是静态的,在https://github.com/laravel/framework/blob/5.3/src/Illuminate/Foundation/Application.php#L1143处引发异常。

这个默认行为可以在bootstrap/app.php中进行修改。

这里是我的解决方案[参考:https://laracasts.com/discuss/channels/general-discussion/how-i-can-change-laravel-directory-structure?page=1]

解决方案:

Core/Application.php

<?php

namespace Core;

use Illuminate\Foundation\Application as IlluminateApplication;

class Application extends IlluminateApplication
{
    protected $appPath = __DIR__;
}

bootstap/app.php

$app = new \Core\Application(
    $_ENV['APP_BASE_PATH'] ?? dirname(__DIR__)
);

我在我的composer中遇到了类似的问题,我在App文件夹中添加了一个helper文件,并在composer中引用了它,我使用了单引号解决了这个问题。我不得不使用双引号并执行dump-auto load和update,现在它可以正常工作了。 - I am Cavic
Laravel 10的解决方案:在bootstrap/app.php中添加$app->useAppPath($app->basePath('Core));(当然,将“Core”更改为您的应用程序文件夹)。 - benbotto

3
请在项目根目录下输入以下命令:composer diagnose。该命令可检测问题,对于我的情况,我发现了这个问题。
 [Seld\JsonLint\ParsingException]
  "./composer.json" does not contain valid JSON
  Parse error on line 1:
  3:06 PM 08-Dec-20{
  ^
  Expected one of: 'EOF', '}', ',', ']'

然后我删除了

2020年12月8日下午3:06

然后我成功创建了控制器。我希望composer diagnose命令能够检测到您的问题。


1
这对我造成影响的原因是有用“//”注释掉的行。"//"可以在单独的一行上或者在一行的结尾。同时,在末尾加逗号也可能会导致该问题。
去除注释和/或多余的逗号可以解决此问题。
这个错误会发生在 "composer update",和 artisan 命令如 "php artisan make:controller TestsController --resource" 或者 "php artisan make:model Test"。

1
你可以使用Visual Code打开composer.json文件。 它会解析并标记问题。
我已经像这样解决了这个问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接