gpt4 book ai didi

php - laravel 4 中的自动命名空间别名

转载 作者:行者123 更新时间:2023-12-04 16:51:02 24 4
gpt4 key购买 nike

我决定放弃模型文件夹并将所有内容移动到存储库结构:app/Acme/Foo
一切都正确命名空间,但是当我尝试访问我的 Bar 时类内app/Acme/Foo/Bar.php我只能将它实例化为 new Acme\Foo\Bar(); .否则,laravel 会在模型文件夹中查找它。唯一的解决方法是在实现 Bar 的文件顶部使用命名空间别名。类(class)。任何解决方法?据我了解,laravel 5 会自动处理此问题,但切换不是首选选项

最佳答案

I can only instantiate it as new Acme\Foo\Bar(); ... The only workaround is namespace aliasing on top of the file which implements the Bar class. Any workaround?



没有(大部分,见下文)没有解决方法,这就是现代 PHP 的工作方式。你类(class)的全名实际上是 Acme\Foo\Bar ,所以这就是您需要用来引用它的内容。如果您想通过短名称( Bar )引用它,那么您可以使用 use在命名空间声明之后的文件顶部的语句。这就是现在的工作方式。

Laravel 确实有解决方案。如果您查看 app/config/app.php ,您将看到以下部分
#File: app/config/app.php
...
'aliases' => array(

'App' => 'Illuminate\Support\Facades\App',
'Artisan' => 'Illuminate\Support\Facades\Artisan',
'Auth' => 'Illuminate\Support\Facades\Auth',
'Blade' => 'Illuminate\Support\Facades\Blade',
'Cache' => 'Illuminate\Support\Facades\Cache',
...
'Eloquent' => 'Illuminate\Database\Eloquent\Model',

该数组允许您为完全命名空间的类设置短别名。 Laravel 主要将它用于 Facades,但它也允许你做 class MyModel extends Eloquent , 其中 Eloquent真的是 Illuminate\Database\Eloquent\Model .您可以将自己的别名添加到此数组
    'Bar'             => 'Acme\Foo\Bar'

然后使用 Bar 在全局范围内引用您的类.然而,习惯命名类的想法可能会更好,因为这是大多数 PHP 框架的发展方向。

另外,如果您好奇,可以查看 aliases 中的别名。上面的数组是通过 PHP 的 class_alias 实现的功能。

关于php - laravel 4 中的自动命名空间别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26109821/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com