플러그인 개발 지침



QueryList 플러그인 개발 가이드


설명하기 전에, www 디렉터리가 현재 프로젝트 디렉터리라고 가정합니다. www目录为当前的项目目录:

www
├── querylist
│   ├── Ext
│   │   └── Hello.php
│   ├── QueryList.php
│   └── vendor
│       
└── testHello.php

演示的所有源码打包下载:完整下载

一.下载QueryList项目到本地

安装querylist

composer create-project jaeger/querylist

然后到querylist目录去执行下面命令安装AQuery,AQuery为所有插件的基类,插件必须继承AQuery并实现run()方法.

composer require jaeger/querylist-ext-aquery

二.在querylist目录下新建Ext目录

querylist/Ext目录可用于存放QueryList扩展

三.在querylist/Ext目录下新建扩展文件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] => 百度一下,你就知道
        )
)

下面附加一些现有的插件源码来加强理解

下面是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;
    }
}

모든 데모 소스 코드 패키지 다운로드:전체 다운로드

< a name="1. QueryList 프로젝트를 로컬로 다운로드">


1. QueryList 프로젝트를 로컬로 다운로드

🎜querylist 설치🎜
<?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;
    }
}
🎜그런 다음 querylist 디렉토리에서 다음 명령을 실행하여 AQuery를 설치합니다. AQuery는 모든 플러그인의 기본 클래스이며 AQuery를 상속해야 합니다. run() 메소드를 구현하세요.🎜rrreee

🎜🎜🎜2. querylist 디렉토리 아래에 새 Ext 디렉토리를 생성합니다

🎜querylist/Ext 디렉토리는 다음과 같습니다. QueryList 확장을 저장하는 데 사용됩니다🎜

🎜🎜🎜3. querylist에서 /Ext 디렉토리에 새로운 확장 파일 Hello.php를 생성합니다. name="아래에 기존 파일이 첨부되어 있습니다. 이해를 돕기 위한 플러그인 소스 코드">🎜🎜🎜 이해를 돕기 위한 기존 플러그인 소스 코드 일부를 첨부합니다

🎜다음은 요청 확장의 소스 코드입니다.🎜 rrreee🎜확장도 상속될 수 있습니다. 다음 로그인 확장은 요청 확장을 상속하고 이를 반복합니다. run() 메소드를 작성했습니다:🎜rrreee🎜🎜🎜