如何在 Laravel 中为模型命名,以免与现有类发生冲突?

Posted

技术标签:

【中文标题】如何在 Laravel 中为模型命名,以免与现有类发生冲突?【英文标题】:How do I namespace a model in Laravel so as not to *** with an existing class? 【发布时间】:2013-04-13 12:58:56 【问题描述】:

在 Laravel 4 中,我想使用一个模型来表示来自我的数据库的 Event。因此,在 app/models 中,我的 Event 模型扩展了 Eloquent。

但是,Laravel 4 已经有一个 Event 类,用于管理应用程序生命周期内的事件。

我想知道的是,如何正确命名我的 Event 模型并以不会与现有 Event 类冲突的方式访问它。

【问题讨论】:

和你在其他地方使用命名空间的方式一样吗?只需注册即可。 这是否意味着我根据它所在的目录命名它?例如namespace Model,然后使用Model\Event访问它? 是的。该文档在模型部分中有一个示例。 我在 Laravel 4 beta 文档中找不到任何关于命名空间的内容。 【参考方案1】:

您只需要像往常一样为其应用命名空间。所以,例如。

<?php namespace Models;

use Eloquent;

class Event extends Eloquent 


然后您应该正确设置您的composer.json 以便它加载您的模型。您可以为此使用 classmappsr-0,具体取决于您的目录结构是否遵循 PSR-0。

我很确定 models 目录已经映射。

编辑 如 cmets 中所述,您必须运行 composer dump-autoload

【讨论】:

这成功了,甚至没有想到运行composer dump-autoload,但现在它可以工作了。 遇到了同样的问题。谢谢! Illuminate/Database/Eloquent/Model.php hasMany Crashes with Class 'Event' not found【参考方案2】:

我对使用命名空间有很多研究,因为我想在 PHPDocumentar 中使用它们,所以不可能添加两倍的命名空间,因为 laravel 已经为你添加了这些,如果我们了解基本问题,为什么我们使用命名空间

1 - 许多库使用相同的类名,因此我们使用命名空间来区分。

2 - 如果你想使用命名空间,那么你应该超出应用程序的范围,这意味着你的供应商文件夹是这类东西。

享受

【讨论】:

以上是关于如何在 Laravel 中为模型命名,以免与现有类发生冲突?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Rails 中为现有模型添加自动完成标记?

如何在rails 5中为现有模型添加外键

在 Laravel 4 中使用命名空间

如何在Python中为现有类添加方法?

如何从 Laravel 中的现有数据库创建迁移和模型

如何在 Laravel 5.5 中为选定的请求类设置自定义响应