如何使用导入包(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 安装包?

在您的代码中,JsonRpc 在当前命名空间 (App\Http\Controllers) 下,因此 '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
    }

}

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

use JsonRpc\Client;

并像这样实例化 class:

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

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

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

您可以在 PHP Namespaces Documentation.

中阅读有关命名空间如何工作的更多信息