プラグイン開発ガイダンス
#QueryList プラグイン開発ガイド
www ディレクトリが現在のプロジェクト ディレクトリであると仮定した全体のディレクトリ構造:
www ├── querylist │ ├── Ext │ │ └── Hello.php │ ├── QueryList.php │ └── vendor │ └── testHello.phpデモ用のすべてのソース コードがパッケージ化され、ダウンロードされます:
1. QueryList プロジェクトをローカルにダウンロードします。
querylist をインストールしますcomposer create-project jaeger/querylist次に、
querylist に移動します。ディレクトリに移動し、次のコマンドを実行して
AQuery ,
AQuery はすべてのプラグインの基本クラスです。プラグインは
AQuery を継承し、# を実装する必要があります。 ##run()
method.composer require jaeger/querylist-ext-aquery
2. querylist ディレクトリ # の下に新しい Ext ディレクトリを作成します。
##querylist/Ext
ディレクトリは、QueryListExtension
3 を保存するために使用できます。新しい拡張ファイルを作成します。 Hello.php<?php
/**
* QueryList的Hello扩展演示
*/
namespace QL\Ext;
class Hello extends AQuery
{
/**
* 必须要实现run()方法
*/
public function run(array $args)
{
//getInstance()方法用于获取任意类的实例,默认获取QueryList实例
$ql = $this->getInstance();
//设置QueryList对象的html属性
$ql->html = $this->getHtml($args['url']);
//返回QueryList对象
return $ql;
}
/**
* 自定义一个抓取网页源码的方法
*/
public function getHtml($url)
{
return file_get_contents($url);
}
}
<?php
require 'querylist/vendor/autoload.php';
use QL\QueryList;
$ql = QueryList::run('Hello',[
'url' => 'http://www.baidu.com'
]);
$data = $ql->setQuery([
'title'=>['title','text']
])->data;
print_r($data);
输出结果;
Array
(
[0] => Array
(
[title] => 百度一下,你就知道
)
)
querylist/Ext
ディレクトリ内
理解を助けるために、いくつかの既存のプラグイン ソース コードを以下に添付します 次は、Request
拡張機能のソース コードです:<?php namespace QL\Ext; /** * @Author: Jaeger <hj.q@qq.com> * @version 1.0 * 网络操作扩展 */ class Request extends AQuery { protected function hq(array $args) { $args = array( 'http' => isset($args['http'])?$args['http']:$args, 'callback' => isset($args['callback'])?$args['callback']:'', 'args' => isset($args['args'])?$args['args']:'' ); $http = $this->getInstance('QL\Ext\Lib\Http'); $http->initialize($args['http']); $http->execute(); if(!empty($args['callback'])){ $http->result = call_user_func($args['callback'],$http->result,$args['args']); } return $http; } public function run(array $args) { $http = $this->hq($args); $ql = $this->getInstance(); $ql->html = $http->result; return $ql; } }
間に拡張機能もあります。継承できます。次のログイン拡張機能は、Request 拡張機能を継承し、run( ) メソッド:
<?php namespace QL\Ext; /** * @Author: Jaeger <hj.q@qq.com> * @version 1.0 * 模拟登陆扩展 */ class Login extends Request { private $http; public $html; public function run(array $args) { $this->http = $this->hq($args); $this->html = $this->http->result; return $this; } public function get($url,$callback = null,$args = null) { $result = $this->http->get($url); return $this->getQL($result,$callback,$args); } public function post($url,$data=array(),$callback = null,$args = null) { $result = $this->http->post($url,$data); return $this->getQL($result,$callback,$args); } private function getQL($html,$callback = null,$args = null) { if(is_callable($callback)){ $result = call_user_func($callback,$result,$args); } $ql = $this->getInstance(); $ql->html = $html; return $ql; } }