【问题标题】:Namespacing not working, using composer psr-4命名空间不起作用,使用 composer psr-4
【发布时间】:2015-09-22 09:13:39
【问题描述】:

我正在使用 slim 框架、composer 和 psr-4 自动加载。

这是在作曲家中:

"Shorty\\":"app/Shorty"

注意:我也用"Shorty\\":"app/Shorty/Models"尝试了上述方法

目录结构:app/Shorty/Models/Trap.php

内部Trap.php

namespace Shorty\Models;

use Illuminate\Database\Eloquent\Model as Eloquent;

    class Trap{
    #code here
    }

在我的路线中:

$users=Trap::leftJoin('users', function($join){

我得到:找不到类“陷阱”

我做错了什么?

【问题讨论】:

  • 这可能没有帮助,但是自从添加了 psr-4 命名空间后,您是否运行了 composer dump-autoload(或 composer 安装/更新)?
  • 我也做了几次转储自动加载
  • 否则请确保您在使用Trap 的路由文件的顶部有一个use Shorty\Models\Trap; 声明。如果在那里,我看不到任何不应该工作的东西("Shorty\\":"app/Shorty" 部分应该工作)。也许您可以使用 composer psr-4 声明的完整复制和粘贴来扩展您的问题。如果您可以在应用中清除任何缓存,请也尝试一下。
  • 我用过 Shorty\Models\Trap;在全局包含文件中,我现在尝试将其移动到我的主路由文件中。下面是作曲家代码... "autoload":{ "psr-4":{ "Shorty\\":"app/Shorty" } },
  • 在 stackoverflow 上找到了这个:stackoverflow.com/questions/25499637/… 我需要类图吗?我遵循的教程没有使用...

标签: php composer-php psr-4


【解决方案1】:

如果类名正确,您将不会收到此错误消息:

Class 'Trap' not found

但是这个

Class 'Shorty\Models\Trap' not found

没有提及包含其命名空间的全限定类名称告诉我,您缺少该类的代码既没有 namespace 语句,也没有使用 use 的导入来导入此“陷阱”类。

或者更准确地说:

此代码将抱怨缺少“Trap”类。

Trap::leftJoin();

此代码会抱怨缺少“Shorty\Models\Trap”类。

\Shorty\Models\Trap::leftJoin();

还有这个:

use Shorty\Models\Trap;

Trap::leftJoin();

或者这个:

namespace Shorty\Models;

Trap::leftJoin();

当 PHP 抱怨某个类不存在时,它总是在别名、相对命名空间间接和其他内容之后显示该类的完全评估的最终名称。

【讨论】:

  • Sven、Wouter J、Ross 谢谢大家。我对这种做事方式有点陌生,我做了另一个假设,我现在意识到这是错误的。我遵循的教程有一个 routes.php 文件,其中包含子文件夹中的单个路由文件。我在 routes.php 中有 use 注释,(我也在 start.php 包含文件中尝试过),它只有在将 use 移动到实际包含的文件后才起作用,在这种情况下是 routes/home.php。也许我应该发布我的整个目录结构。你们都提供了惊人的帮助。再次感谢。
猜你喜欢
  • 2014-10-25
  • 1970-01-01
  • 2013-08-03
  • 2014-03-17
  • 2014-11-12
  • 2013-11-30
  • 2016-01-22
  • 2019-08-27
  • 1970-01-01
相关资源
最近更新 更多