美好的一天!
我读的越多,我就越感到困惑。 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即可点亮\ 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
}
我有这个类数据的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 ::来从项目的任何地方访问我的类。
然而 ,我还注意到只需添加 /app/config/app.php
'aliases' => array(
//....,
'PJD' => 'PJ\Data',
),
如果没有所有外观和ServiceProviders,我会得到完全相同的结果。那么,一个或另一个的重点是什么?
谢谢,抱歉这个大帖子。
答案 0 :(得分:4)
Facade 和 Alias 是两个完全不同的概念。
除非您在绑定时在服务提供商中设置PJ\Data\
,否则 无法访问PJD::
alias
。
如果您正在访问它,而未在 config / app.php 中定义它,那么您已在服务提供程序文件本身中进行了设置。
别名的定义,
用于表示指定人员在另一个指定名称下也是已知或更熟悉的。
这只是意味着你给了一个不同的名字,以便更容易打电话。
e.g。
如果你有这样的类:Foo\Bar\AVeryLongNamespaceClassName\Data
,你可以给别名(例如 PJD )并通过这个别名访问它的方法和属性。
注意:强>
单元测试是外墙以他们的方式工作的一个重要方面。事实上,可测性是外立面存在的主要原因。