再会!
我读得越多,我就越困惑。Facade 和 Aliases 有什么区别?
我有这个类:
/app/libraries/Project/Data.php
namespace PJ;
class Data {
// It is much like a data container, with static methods and properties for saving info
}
和相应的门面,所以我可以只使用PJD::来访问。
根据周围的一些网页:
... Laravel Facades 是代理。它们在代码的底层真实实现上环绕并调用函数。此外,在 Laravel 应用程序的上下文中,这些 Facade 是通过将它们分配给别名来访问的。依赖注入容器的这种使用允许您通过简单地调用 File 来引用 Illuminate\Support\Facades\Filesystem 之类的东西。(http://ryantablada.com/post/proxies-service-locators-alias-facades-and-war)
但是,我还发现并成功测试了添加如下内容:
__app/config/app.php__
'aliases' => array(
//....,
'PJD' => 'PJ\Data',
),
我也可以以同样的方式访问我的班级。
那么,有什么区别呢?
谢谢
编辑#01
我在/app/libraries/Project/Data.php中创建了一个名为 Data 的类
namespace PJ;
class Data {
// It is much like a data container, with static methods and properties for saving info
}
我有这个类数据的外观类/app/libraries/Project/DataFacade.php
use Illuminate\Support\Facades\Facade;
class PJD extends Facade {
protected static function getFacadeAccessor() {
return 'PJData';
}
}
我有他们的服务提供商:/app/libraries/Project/DataServiceProvider.php
use Illuminate\Support\ServiceProvider;
class DataServiceProvider extends ServiceProvider {
public function register() {
$this->app->singleton('PJData', function() {
return new PJ\Data;
});
}
}
我还添加到/app/config/app.php:
'providers' => array(
// ....
'DataServiceProvider',
),
在composer.json我添加了一个 psr-4 行来将 PJ 命名空间定向到 /app/libraries/Project
"psr-4": {
"PJ\\": "app/libraries/Project"
},
通过这样做,我可以从项目中的任何地方访问我的课程,只需通过 PJD:: 而不是 PJ\Data::。
但是,我也注意到,只需添加到/app/config/app.php
'aliases' => array(
//....,
'PJD' => 'PJ\Data',
),
没有所有的门面和服务提供者,我得到完全相同的结果。那么,一个或另一个的意义何在?
谢谢,很抱歉这篇大文章。