2017-11-02 7 views
0

codeigniterライブラリでApache Thriftを使いたいです。
私は以下のコードを持っています。私はファイルをチェックして、それらが存在します。
PHPのバージョンはPHP 5.6.31
リサイクルverionは0.10.*codeigniterでapache thriftを使用すると、クラスが見つかりません。

use Thrift\Transport\TSocket; 
use Thrift\Transport\TBufferedTransport; 
use Thrift\Transport\THttpClient; 
use Thrift\Protocol\TBinaryProtocol; 
use Thrift\Exception\TException; 
use Thrift\ClassLoader\ThriftClassLoader; 
use \test\MyServiceClient; 

class Cds2thriftclass extends Rootclass { 
    private $_thrift_uri = ""; 
    private $_thrift_port = ""; 
    private $_timeout = 5000; 

    private $transport; 
    private $protocol; 
    private $client; 

    public function __construct() { 
     parent::__construct(); 
     $this->_thrift_uri = 127.0.0.1; 
     $this->_thrift_port = 8899; 

     $THRIFT_ROOT = APPPATH . 'libraries/thrift10'; 
     require_once $THRIFT_ROOT.'/Thrift/ClassLoader/ThriftClassLoader.php'; 

     $GEN_DIR = $THRIFT_ROOT . '/Thrift/packages'; 

     $loader = new ThriftClassLoader(); 
     $loader->registerNamespace('Thrift', $THRIFT_ROOT); 
     $loader->registerDefinition('test', $GEN_DIR); 
     $loader->register(); 

     $this->transport = new TSocket($this->_thrift_uri, $this->_thrift_port); 
     $this->transport->setRecvTimeout($this->_timeout); 
     $this->transport = new TBufferedTransport($this->transport, 1024, 512); 
     $this->protocol = new TBinaryProtocol($this->transport); 
     $this->client = new \test\MyServiceClient($this->protocol); 

です、それは私にエラーを示しています。このことについてちょうどこの link

Class 'test\MyServiceClient' not found in /apps/blog/application/libraries/mythriftclass.php 

を、私はGoogleとSTでこの問題を検索しますが、それは私の問題を解決しません。

私が間違ったことを教えてください。

ありがとうございました。


は今、問題は単にファイルをロードするためにPHP require FUNCを使用し、解決しています。
しかし、とにかく長年の助けてくれてありがとう。
コードは打撃です:あなたが名前空間を使用する場合

$THRIFT_ROOT = APPPATH . 'libraries/thrift10'; 
    require_once $THRIFT_ROOT.'/Thrift/ClassLoader/ThriftClassLoader.php'; 

    $GEN_DIR = $THRIFT_ROOT . '/Thrift/packages'; 

    $loader = new ThriftClassLoader(); 
    $loader->registerNamespace('Thrift', $THRIFT_ROOT); 
    $loader->registerDefinition('test', $GEN_DIR); 
    $loader->register(); 

    $this->transport = new TSocket('127.0.0.1', 8899); 
    $this->transport->setRecvTimeout($this->_timeout); 
    $this->transport = new TBufferedTransport($this->transport, 1024, 512); 
    $this->protocol = new TBinaryProtocol($this->transport); 

    require_once $THRIFT_ROOT . '/Thrift/gen-php/test/Types.php'; 
    require_once $THRIFT_ROOT . '/Thrift/gen-php/test/Cds2APIService.php'; 

    $this->client = new MyServiceClient($this->protocol); 

答えて

0

、あなたはconfig/config.phpファイルに作曲

することができます$config['composer_autoload'] = TRUEを使用する必要があります。このオプションはTRUEに変更され、デフォルトはFALSEです

ここに注意してください。あなたはTRUEを変更する場合はCIが自動的にそうapplication/vendor/autoload.phpをロードされ、ベンダーのプロジェクトのルートディレクトリにあるディレクトリ、および同じレベルでindex.php場合、その後、あなたは$config['composer_autoload'] = realpath (APPPATH.'../vendor/ autoload.php');を使用することができ、その後、作曲

+0

を導入する方法は、それは言うことです、Iリサイクルのために作曲家を使わなければなりませんか?プロジェクトでは作曲家を使用していませんが、他の方法がありますか? –

+0

Ciは名前空間でサポートされていません。あなたが作曲家を使いたくなく、Ciを使いたいなら、名前空間を使わないでください。名前空間を使用したい場合は、laravel – long

+0

を使用することをお勧めします.CIは名前空間でサポートされていません。PHPのバージョンが5.3より高い場合、名前空間ですべてサポートされていると思います。 –

関連する問題