2017-01-31 11 views
0

Я пытаюсь заставить Sqlite3 работать на laravel.Sqlite3 не работает внутри laravel (5.4) Php 7

В простом файле Php он отлично работает!

<?php 


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

?> 

Однако внутри функции контроллера laravel это терпит неудачу.

<?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

В верхней части контроллера, где вы видите другие директивы использования, добавить следующее заявление:

Use SQLite3; 

Laravel управляется PSR-4 пространства имен , что в основном указывает на файл в структуре каталогов, поэтому разные библиотеки могут иметь одинаковые имена классов, не наступая друг на друга.

Если вы не объявляете пространство имен для класса SQLite, он считает, что класс живет в той же папке, что и ваш контроллер, потому что именно там вы его вызывали.

Класс SQLite3, который включен в PHP, имеет пространство имен, которое начинается с «SQLite3», поэтому, указав, что вверху любая ссылка, сделанная на этот класс, укажет на правильный скрипт.

0

Это проблема с пространством имен. Вы находитесь в пространстве имен App\Http\Controllers, который не содержит никакого класса SQLite3.

Просто добавьте его в список, если use операторов в верхней части файла.

use SQLite3; 

Теперь вы больше не должны получать эту ошибку.

Подробнее в руководстве: Using namespaces: Aliasing/Importing