美好的一天!
我读的越多,我对此就越感到困惑 . 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 . 使用Dependency Injection容器允许您通过简单地调用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',
),
我也可以用同样的方式访问我的 class .
那么,有什么区别?
谢谢
EDIT #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
}
我有这个类数据的Facade类 /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 ::从项目的任何地方访问我的类 .
However ,我也注意到只是加入 /app/config/app.php
'aliases' => array(
//....,
'PJD' => 'PJ\Data',
),
没有所有外观和ServiceProviders,我得到完全相同的结果 . 那么,一个或那个有什么意义呢?
谢谢,抱歉这篇大帖子 .
1 回答
Facade 和 Alias 是两个完全不同的概念 .
除非您在绑定时在服务提供商中设置了
alias
,否则PJ\Data\
将被PJD::
访问 .如果您正在访问它,而不在config / app.php中定义它,那么您已在服务提供程序文件本身中进行了设置 .
别名的定义,
它只是意味着您为类提供了不同的名称,以便更容易调用 .
例如
如果您有这样的类:
Foo\Bar\AVeryLongNamespaceClassName\Data
,您可以只提供别名(例如PJD)并通过此别名访问其方法和属性 .Note: