上周没写,主要是忙了点
d8的目录结构已经有很多人都说了,不在重复他们说过的东西了,只说几个自己的东西,而自己这些都用到了drupal的自动加载
回顾下上次说的那一部分
//看着这行代码 $autoloader = require_once 'autoload.php'; //打开文件,后又是一个包含,继续打开 return require __DIR__ . '/vendor/autoload.php'; //注意composer,这个东西,这是一个php管理工具 <?php // autoload.php @generated by Composer require_once __DIR__ . '/composer' . '/autoload_real.php'; return ComposerAutoloaderInitDrupal8::getLoader();
d8使用了composer进行自动加载。
composer 这个php管理工具有很多框架都在使用,yii2,d8,symfony等等都在用。
这个自动加载有5种方式,如果你添加了一个新的类库,可以使用其中任意一种,这4种方式分别为class_map,files,namespace,psr4.对应composer文件夹下的autoloder_*.php文件
我只熟悉prs4,其他的没仔细看,有兴趣的朋友看了,可以给我讲讲
psr4是一种标准与其对应的是之前的psr0标准,psr4定义存放目录的方式为,当然这些也没有什么意义,可以作为了解内容。
vendor/ vendor_name/ package_name/ src/ ClassName.php # Vendor_Name\Package_Name\ClassName tests/ ClassNameTest.php # Vendor_Name\Package_Name\ClassNameTest
转回话题那么我想引入一个第三方类库怎么搬,方法很简单,我这里以一个支付宝面对面支付(不是即及时到帐)的sdk类库作为列子,改类库是在支付宝官网下载,里面的配置已经配置好,我在外层放了一个pay文件夹,为方便以后添加微信支付、银行卡快捷支付等,能够统一管理,目录结构如下
打开d8/vendor/composer/autoload_psr4.php最后为数组添加两对键值,为啥添加两个呢?因为这个支付宝的sdk并不是psr4规范的
'pay\\alipay_sdk\\' => array($vendorDir . '/pay/alipay_sdk'), 'pay\\alipay_sdk\\aop\\request\\' => array($vendorDir . '/pay/alipay_sdk/aop/request'),
哦,对了,支付宝sdk的每个文件都需要在每一个类文件的上面添加一个命名空间,因为支付宝的这个sdk没有使用命名空间
命名空间的规则是键值,其中\\号是进行了转意,例如命名命名空间是pay\alipay_sdk,文件位置是vendor/pay/alipay_sdk/F2fpay.php(类名与文件名相同)
<?php //定义了namespace namespace pay\alipay_sdk; //这三个require支付波改文件原来有的,我也就没有动 require_once 'AopSdk.php'; require_once 'function.inc.php'; require 'config.php'; use pay\alipay_sdk\aop\request\AlipayTradePrecreateRequest; use pay\alipay_sdk\aop\request\AlipayTradeQueryRequest; class F2fpay { public function barpay($out_trade_no, $auth_code, $total_amount, $subject) { $biz_content="{\"out_trade_no\":\"" . $out_trade_no . "\","; $biz_content.="\"scene\":\"bar_code\","; $biz_content.="\"auth_code\":\"" . $auth_code . "\","; $biz_content.="\"total_amount\":\"" . $total_amount . "\",\"discountable_amount\":\"0.00\","; $biz_content.="\"subject\":\"" . $subject . "\",\"body\":\"test\","; $biz_content.="\"goods_detail\":[{\"goods_id\":\"apple-01\",\"goods_name\":\"ipad\",\"goods_category\":\"7788230\",\"price\":\"88.00\",\"quantity\":\"1\"},{\"goods_id\":\"apple-02\",\"goods_name\":\"iphone\",\"goods_category\":\"7788231\",\"price\":\"88.00\",\"quantity\":\"1\"}],"; $biz_content.="\"operator_id\":\"op001\",\"store_id\":\"pudong001\",\"terminal_id\":\"t_001\","; $biz_content.="\"timeout_express\":\"5m\"}"; echo $biz_content; $request = new AlipayTradePayRequest(); $request->setBizContent ( $biz_content ); $response = aopclient_request_execute ( $request ); return $response; } public function qrpay($out_trade_no, $total_amount, $subject) { $biz_content="{\"out_trade_no\":\"" . $out_trade_no . "\","; $biz_content.="\"total_amount\":\"" . $total_amount . "\",\"discountable_amount\":\"0.00\","; $biz_content.="\"subject\":\"" . $subject . "\",\"body\":\"test\","; $biz_content.="\"goods_detail\":[{\"goods_id\":\"apple-01\",\"goods_name\":\"ipad\",\"goods_category\":\"7788230\",\"price\":\"88.00\",\"quantity\":\"1\"},{\"goods_id\":\"apple-02\",\"goods_name\":\"iphone\",\"goods_category\":\"7788231\",\"price\":\"88.00\",\"quantity\":\"1\"}],"; $biz_content.="\"operator_id\":\"op001\",\"store_id\":\"pudong001\",\"terminal_id\":\"t_001\","; $biz_content.="\"timeout_express\":\"5m\"}"; //echo $biz_content; $request = new AlipayTradePrecreateRequest(); $request->setBizContent ( $biz_content ); $response = aopclient_request_execute ( $request ); return $response; } public function query($out_trade_no) { $biz_content="{\"out_trade_no\":\"" . $out_trade_no . "\"}"; $request = new AlipayTradeQueryRequest(); $request->setBizContent ( $biz_content ); $response = aopclient_request_execute ( $request ); return $response; } public function cancel($out_trade_no) { $biz_content="{\"out_trade_no\":\"" . $out_trade_no . "\"}"; $request = new AlipayTradeCancelRequest(); $request->setBizContent ( $biz_content ); $response = aopclient_request_execute ( $request ); return $response; } public function refund($trade_no, $refund_amount, $out_request_no) { $biz_content = "{\"trade_no\":\"". $trade_no . "\",\"refund_amount\":\"" . $refund_amount . "\",\"out_request_no\":\"" . $out_request_no . "\",\"refund_reason\":\"reason\",\"store_id\":\"store001\",\"terminal_id\":\"terminal001\"}"; $request = new AlipayTradeRefundRequest(); $request->setBizContent ( $biz_content ); $response = aopclient_request_execute ( $request ); return $response; } }
以上代码里面的源码由于需求和环境等一些原因被我改过了,因为sdk里面之前包含了一些demo,而且demo还报错,我去掉了,ok下面让我们来测试下
发现报错 未找到类,好吧说明以上方法是错的,回头在弄
评论
好文!!
好文!!
但是经过测试发现以上方法是错的,正确的方式还需要探究
但是经过测试发现以上方法是错的,正确的方式还需要探究