我正在尝试使用 Laravel 5.0 中的 JsonRpc 包来访问比特币RPC命令。到目前为止,我已经通过composer成功安装了JsonRpc的dev-master分支;生成自动加载文件,并设法查看供应商文件夹下的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');
}
}
要验证,我正在尝试访问&#39; jsonRPCClient &#39;函数位于Client.php内部。文件的位置和结构如下:
project-root\vendor\jsonrpc\jsonrpc\src\JsonRpc\Base\Client.php
然而,这似乎不是在Laravel 5中访问导入模块的方法,而是Laravel正试图找到一个名为&#39; JsonRpc&#39;并且这样做会抛出这个异常,说无法找到控制器:
FatalErrorException in PoolController.php line 9:
Class 'App\Http\Controllers\JsonRpc' not found
所以,我的问题是,如何在Laravel 5.0中使用外部编写器安装的软件包?
答案 0 :(得分:1)
对于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 Namespaces Documentation中详细了解名称空间的工作原理。
答案 1 :(得分:0)
在您的代码中,当前命名空间(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
}
}