2017-01-05 7 views
0

私はこのコードをネイティブのPHPアプリケーションに持っています。Codeigniterに "use"ステートメントを読み込むことができません

use Elasticsearch\ClientBuilder; 
require 'vendor/autoload.php'; 

私はこのアプリケーションをCodeigniterに変換しています。今、上記のコードをCIに貼り付けるとエラーになります。私は次のようなステートメントで必要なパーツエラーを突き止めました。

require_once APPPATH."third_party/elasticsearch/vendor/autoload.php"; 

が、私はそれは常に私に構文エラーを与えている

use Elasticsearch\ClientBuilder; 

を修正することはできませんよ。誰もそれを修正する方法を知っていますか?

助けてください。 ありがとう

+0

のために私はまた、use文でエラーが発生しました。私はクラスの前にコードの先頭にrequireとuseを移動してエラーを解決します。 –

+2

あなたのケースでは、if(!define( 'BASEPATH'))exit( '直接スクリプトアクセスは許可されていません')の後に最初にあります。 require_once APPPATH。 "third_party/elasticsearch/vendor/autoload.php"; 次に、Elasticsearch \ ClientBuilderを使用します。その後、クラス宣言... –

答えて

0

単純な方法は、config/autoload.phpファイルを使用しています。あなたのコードをライブラリとして入れ、それを自動ロードさせてください。

でも、インポートしたいクラスがたくさんある場合は、実際的なアプローチではありません。ここで私は何をしたのですか: 私は自分のファイルとライブラリ専用のフォルダを作って、名前空間にして、それを自動ロードしました。

ここで、ファイルをMyProjectフォルダに配置し、名前空間をパスと一致させるとします。 MyProject/Bases/Class1.phpには名前空間MyProject/Basesがあります。

このコードをconfig/config.phpファイルの最後に追加します。

spl_autoload_extensions('.php'); // Only Autoload PHP Files 
 

 
spl_autoload_register(function($classname){ 
 
    
 
    if(strpos($classname,'\\') !== false){ 
 
     // Namespaced Classes 
 
     $classfile = /*strtolower(*/str_replace('\\','/',$classname)/*)*/; 
 
     
 
     if($classname[0] !== '/'){ 
 
      $classfile = APPPATH.''.$classfile.'.php'; 
 
     } 
 
     
 
     require($classfile); 
 
     
 
    } else if(strpos($classname,'interface') !== false){ 
 
     // Interfaces 
 
     strtolower($classname); 
 
     require('application/interfaces/'.$classname.'.php'); 
 
    } 
 
    
 
});

アプリケーションディレクトリ内の名前空間のすべてのファイルのコードの自動負荷のこの作品。これで、必要なファイルを追加し、ディレクトリパスに従ってネームスペースを作成し、クラス内で「使用」することができます。私はDOMPDFライブラリが含まれていたときに

おかげThimothyペレスは、彼の答えhere

関連する問題