有时候模版里面定义需要写很长的全路径类名,此处提供一个 简易的别名调用代码来规避此问题,缺点就是IDE 代码提示功能就没有了 <?php /** * Facade 包装类 * * 优点: * 使用简单的方式来省掉视图里面长长的命名空间调用,诸如 YII 的模版 * 缺点: * 这么写在 IDE 中会失去代码自动提示的功能,对于 sublime 狗而言貌似不是缺点 * * 使用方法: * ZGFacade::{方法名}( {facade名称}, 参数1, 参数2,...参数n ) * * <code> * // 初始化 * ZGFacade::setZGFacade('form', 'Aert_Form'); * ZGFacade::setZGFacade('esClient', '\Elasticsearch\Client'); * * // 使用demo * $form = ZGFacade::newInstance('form', 'frm2', 'delete'); * dump($form); * * echo ZGFacade::server('form', 'REQUEST_METHOD'); * echo ZGFacade::get('form', 'a'); * * $dsn = Config::get('esken.dsn'); * $esClient = ZGFacade::newInstance('esClient', $dsn); * dump($esClient); * </code> * @author vb2005xu@qq.com */ final class ZGFacade { private static $map = [ 'form' => 'Aert_Form' ]; public static function setZGFacade($alias, $class) { self::$map[ $alias ] = $class; } private static function __facade__($facade, $method, $arguments=[]) { if ( is_object($facade) ) { // 调用 对象方法 return call_user_func_array( [$facade, $method], $arguments ); } else if (is_string($facade)) { if ( empty(self::$map[$facade]) ) { throw new Exception("未定义 'facade': {$facade} "); } // 调用 静态方法 if ( 'newInstance' == $method ) { $class = new ReflectionClass( self::$map[$facade] ); return $class->newInstanceArgs( $arguments ); } $class = self::$map[$facade]; return call_user_func_array( [$class, $method], $arguments ); } throw new Exception("无效 'facade' 调用!"); } public function __call($method, $arguments) { $facade = array_shift($arguments); return self::__facade__($facade, $method, $arguments); } public static function __callStatic($method, $arguments) { $facade = array_shift($arguments); return self::__facade__($facade, $method, $arguments); } }
相关推荐
此外,可能还有一个门面(Facade)类,它提供了一个简化的静态调用接口,使得代码更加简洁易读。 在控制器或其他业务逻辑层,我们可以通过依赖注入来使用NS API服务。例如,如果有一个`NsApiClient`类,我们可以在...
当API调用失败时,它可以抛出异常或返回错误信息,帮助开发者调试和解决问题。 总之,"Laravel开发-mindbody-laravel"项目为Laravel开发者提供了一个高效且易于使用的工具,以便他们在Laravel应用中无缝集成...
【描述】提到的"Laravel的dompdf包装"是指laravel-dompdf是Laravel的一个服务提供者和facade,它将开源的dompdf库封装起来,以便于在Laravel应用中更方便、直观地使用。通过这个包装,开发者可以利用Laravel的便利性...
对于`laravel-stat-search-analytics`,可能存在一个门面类,如`SearchAnalytics`,使得在代码中调用API功能变得更加简洁。 3. **模型(Models)**:Laravel模型通常与数据库表关联,用于处理数据操作。在这个项目...
这个 `Laravel开发-daisycon` 项目就是针对这种情况的一个解决方案,它为 Laravel 提供了一个方便的包装器,使得与 Daisycon 的 API 交互变得简单高效。 **Laravel 框架基础** Laravel 是一款基于 PHP 的开源 Web ...
`laravel-pdf`提供了`PDF` Facade,可以便捷地调用其方法生成PDF。以下是一个简单的例子: ```php use Spatie\PDFGenerator\Facades\Pdf; // 假设我们有HTML字符串 $html = '<h1>Hello, World!</h1>'; // 使用...
Spring 的 ORM 包会根据配置文件自动创建DAO对象,然后通过事务代理包装成Facade对象,提供给业务层使用。Facade对象通常作为一个服务接口的实现,对外提供无事务处理的业务方法。 8. **配置文件位置**: Spring ...
开发者可以通过注入服务或者使用门面(Facade)来调用ORS API的方法,例如获取路线、计算距离或时间等。服务类通常会封装HTTP请求,处理如认证、参数构造等细节,使得开发者能更专注于业务逻辑。 例如,为了获取一...
多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。 5、String是最基本的数据类型吗? 基本数据类型包括byte、int、char、long、float、double、boolean和short。 java....
控制器(Controller)接收用户输入并调用模型和视图完成用户的需求。 2. **Facade (外观)**:外观模式为子系统中的一组接口提供一个一致的界面,这种模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。...
该模式通过创建一个新的适配器类来包装原有类,实现接口间的转换。 #### 桥接模式(Bridge Pattern) 桥接模式将抽象部分与其实现部分分离,使它们都可以独立地变化。这种模式适用于当一个类的行为和属性都需要...