如何在 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
以便它加载您的模型。您可以为此使用 classmap
或 psr-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 中为模型命名,以免与现有类发生冲突?的主要内容,如果未能解决你的问题,请参考以下文章