我的 Laravel 应用程序中有一个名为 Event
的模型。正如我刚刚发现的,这会在我的模型和内置外观 Illuminate\Support\Facades\Event
之间产生冲突。这里显而易见的解决方案是更改我的模型的名称,这并不理想,因为我实际上没有其他名称可以给我的模型提供任何有意义的名称,或者重命名 app.php
对于Illuminate\Support\Facades\Event
,我想避免这样做,因为担心将来会破坏任何可能依赖该别名的东西(我担心我可能会忘记)。
有人建议我也许可以使用命名空间,我尝试如下:
app/models/Event.php
namespace Models; #<-- I've also tried using "\Models" here
class Event extends \Eloquent{
app/database/seeds/DatabaseSeeder.php
Models\Event::create(); #<-- again, I've also used "\Models\Event"
当我运行 php artisan db:seed
时,上述所有 4 个组合都产生了 Class 'Models\Event' not find
错误。
也许我只是没有正确理解命名空间,但更紧迫的问题是如何解决我的问题。如果可以按照建议使用命名空间来解决这个问题,那就太好了,但我也愿意接受任何其他想法。
最佳答案
我很早就犯了这个错误,不一定理解命名空间在整个应用程序中的作用。
命名空间应该标记应用程序本身的域或职责内的业务逻辑,因此提供模型的命名空间不一定有用。相反,创建一个以应用程序、您的公司、您或您喜欢的任何名称命名的根命名空间,然后提供模型子命名空间。
例如:
namespace MyGreatApp\Models;
class Event extends \Eloquent{ }
然后您可以在以下位置引用此模型:
use MyGreatApp\Models\Event;
$event = new Event();
从长远来看,这是一种更干净、更有组织的方法。但这确实意味着将您的模型移动到不同的文件夹中。但这并没有什么问题。至少这样您就知道您的 MyGreatApp 命名空间中拥有所有自定义代码。 :)
关于Laravel:模型名称和内置外观之间的冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25100642/