如何使用导入的程序包(JsonRpc)


How to use imported packages (JsonRpc)

我正在尝试使用Laravel 5.0中的JsonRpc包来访问比特币RPC命令。到目前为止,我已经通过composer成功安装了JsonRpc的dev-master分支;生成了自动加载文件,并设法查看了vendor文件夹下的jsonrpc文件夹。

因此,我现在正试图从名为"PoolController.php"的控制器访问包。这是我试图用来实现这一点的代码:

<?php namespace App'Http'Controllers;
use vendor'JsonRpc'JsonRpc'src'JsonRpc'client;
class PoolController extends Controller {
    public function index()
    {
        $bitcoind = JsonRpc::jsonRPCClient('http://username:password@localhost:8332/');
        $balance = $bitcoind->getbalance("");
        return view('pool');
    }
}

为了验证,我正在尝试访问Client.php中的"jsonRPCClient"函数。文件的位置和结构如下:

project-root'vendor'jsonrpc'jsonrpc'src'JsonRpc'Base'Client.php

然而,这似乎不是访问Laravel 5中导入模块的方式,相反,Laravel正试图找到一个名为"JsonRpc"的控制器,并在这样做的过程中抛出了这个异常,称找不到控制器:

FatalErrorException in PoolController.php line 9:
Class 'App'Http'Controllers'JsonRpc' not found

所以,我的问题是,如何在Laravel 5.0中使用外部安装的composer包?

对于PSR自动加载,您不需要将整个供应商目录路径作为命名空间的一部分。如果查看vendor'jsonrpc'jsonrpc'src'JsonRpc'Base'Client.php文件,您将看到文件开头的名称空间声明是namespace JsonRpc;。所以你只需要使用这个名称空间和类名:

use JsonRpc'Client;

并像这样实例化类:

$bitcoind = Client('http://username:password@localhost:8332/');

或者使用完整的类名称空间实例化它(这意味着不需要use语句):

$bitcoind = 'JsonRpc'Client('http://username:password@localhost:8332/');

您可以在PHP命名空间文档中阅读更多关于命名空间如何工作的信息。

在您的代码中,当前命名空间(App''Http''Controllers)下的JsonRpc,因此为'App'Http'Controllers'JsonRpc' not found

像这样导入包:

<?php namespace App'Http'Controllers;
use JsonRpc'Client as JsonRpcClient;
class PoolController extends Controller {
    public function index()
    {
        $client = new JsonRpcClient($url);
        $client->call('method', array($param1, $param2));
        # your code
    }
}