【问题标题】:Laravel 5.2 namespacesLaravel 5.2 命名空间
【发布时间】:2016-11-27 12:44:15
【问题描述】:

我正在为 laravel 中的命名空间而苦苦挣扎。在做 laravel new 之后,我有一个项目的标准文件夹结构。我在 app 文件夹中添加了一个名为 dataaccess 的文件夹,因此我将所有数据访问类放入其中,因此它具有以下结构:

projectdir>app>dataaccess>dataaccessclasses(文件)

并且我所有的数据访问类在每个类的顶部都有命名空间 App(我这样做只是为了让事情变得简单)。现在在我的控制器中,我将它添加到顶部,以便我可以使用我的数据访问类:

<?php use App; ?>

但是 Laravel 告诉我它找不到我的数据访问类并尝试相对于控制器的命名空间来解析它。这是它吐给我的错误:

Container.php 第 794 行中的反射异常:类 App\Http\Controllers\StockDataAccess 不存在。

任何人都可以阐明这一切的含义吗?

【问题讨论】:

    标签: php laravel laravel-5 namespaces


    【解决方案1】:

    你需要更新 composer.json 中的类图 使用“app\dataaccess\dataaccessclasses”并运行 composer dump

    【讨论】:

      【解决方案2】:

      app 文件夹默认遵循PSR-4 自动加载规范

      因此,在 app 文件夹的子文件夹中声明类时,不应使用 App 命名空间,而应使用相对于特定子文件夹路径的命名空间。

      例如在这个类中:

      app > dataaccess > dataaccessclasses > StockDataAccess.php 
      

      你应该使用:

      namespace App\dataaccess\dataaccessclasses\StockDataAccess; 
      

      在你的类定义文件中。要在控制器中使用该类,您应该使用:

      use App\dataaccess\dataaccessclasses\StockDataAccess; 
      

      【讨论】:

      • 按照您说的尝试了这个,但它仍然以同样的错误结束。我正在阅读 psr-4 以了解这一切意味着什么,但遗憾的是,她没有工作
      • @Eagletrophy :它给你同样的错误?如果你在你的控制器中使用use App\dataaccess\dataaccessclasses\StockDataAccess;,至少它应该在那个目录中寻找类,给你另一个错误。对于 PSR-4,例如查看 app 文件夹中现有的 Laravel 类(即 http/middleware ecc. ):您会看到每个类的命名空间总是依赖于类文件路径
      • 我检查了我所拥有的内容与您刚刚解释的内容,但我仍然得到同样的结果。这真的很令人沮丧,因为即使在使用 php-fig 浏览了 PSR-4 文档之后,我仍然看不到我的错误在哪里。我只会在我的控制器中编写我的数据访问代码,而忘记这样做。但这对我来说就像一个 laravel 错误,无法正确解析 Windows 或其他东西中的路径。无论如何感谢您的帮助 moppo
      • @Eagletrophy :尝试发布您的类和控制器代码,以及类的完整路径
      猜你喜欢
      • 1970-01-01
      • 2011-09-22
      • 2016-06-20
      • 2016-05-03
      • 2023-03-21
      • 2015-07-27
      • 2023-04-09
      • 2017-04-23
      • 2018-05-05
      相关资源
      最近更新 更多