2017-01-31 27 views
0

私はlqlvelでSqlite3を動作させようとしています。Sqlite3はlaravel(5.4)の中で動作しませんPHP 7

シンプルなPHPファイルではうまくいきます!

<?php 


$handle = new SQLite3("mydb.db"); 

?> 

しかし、ラヴェルコントローラの機能の中では、ひどく失敗します。

<?php 

namespace App\Http\Controllers; 

use App\Http\Controllers\Controller; 
use Illuminate\Foundation\Auth\AuthenticatesUsers; 
use Illuminate\Http\Request; 
use Illuminate\Contracts\Cookie\Factory; 

class HomeController extends Controller 
{ 
    /* 
    |-------------------------------------------------------------------------- 
    | Home Controller 
    |-------------------------------------------------------------------------- 
    | 
    | This is the home - dasboard controller, 
    | where you land if you visit the site the first time 
    | ror are redirected from the login page. 
    | 
    */ 


    /** 
    * Create a new controller instance. 
    * 
    * @return void 
    */ 
    public function __construct() 
    { 
     $this->middleware('customauthorize'); 
    } 

    public function Index(Request $request, Factory $cookie) 
    { 
     $handle = new SQLite3("mydb.db"); 

     return view('welcome'); 
    } 
} 

?> 

実際には、私のSqlite3オブジェクトにはぎざぎざの線が表示されます。

Class 'App\Http\Controllers\SQLite3' not found 

どうしてですか?

+0

SQLite3の名前空間をインポートしませんでした。 – devk

+0

返信ありがとう、私の普通のPHPファイルで私はそれを指定する必要はなかったので、名前空間は何か教えてくれますか? –

+0

私は知らない:Dそれはカスタムライブラリですか、それともL5.4のものですか?また、それが働いていたファイルのフォルダ構造は何ですか?(例えば、/project/test.phpで試した場合、SQLite3は/ projectフォルダにもありますか?) – devk

答えて

0

LaravelはPSR-4名前空間によって駆動される
Use SQLite3; 

これは基本的にディレクトリ構造内のファイルを指しているので、異なるライブラリはお互いのつま先で足を踏み入れずに同じクラス名を持つことができます。

SQLiteクラスのネームスペースを宣言していない限り、そのクラスはコントローラを呼び出す場所であるため、コントローラと同じフォルダに存在すると考えられます。

PHPに含まれているSQLite3クラスには、 'SQLite3'で始まる名前空間があります。そのため、そのクラスの参照が正しいスクリプトを指していることを宣言します。

0

これは名前空間の問題です。 SQLite3クラスが含まれていないApp\Http\Controllers名前空間にあります。

ファイルの先頭にuse文がある場合は、リストに追加してください。

use SQLite3; 

もうエラーは発生しません。

よりマニュアルで読む:あなたは次の宣言を追加し、他の使用のディレクティブを参照してくださいあなたのコントローラの上部にUsing namespaces: Aliasing/Importing

関連する問題