Sqlite3 在 laravel (5.4) Php 7 中不起作用

Sqlite3 does not work inside laravel (5.4) Php 7

我正在尝试让 Sqlite3 在 laravel 上工作。

在一个简单的 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

为什么会这样?

这是一个命名空间问题。您位于 App\Http\Controllers 命名空间中,该命名空间不包含任何 SQLite3 class.

如果文件顶部有 use 语句,只需将其添加到列表中即可。

use SQLite3;

现在您应该不会再收到该错误了。

在手册中阅读更多内容:Using namespaces: Aliasing/Importing

在控制器的顶部,您可以看到其他使用指令,添加以下声明:

Use SQLite3;

Laravel 由 PSR-4 命名空间驱动,它基本上指向目录结构中的一个文件,因此不同的库可以具有相同的 class 名称,而不会互相干扰。

除非您为 SQLite class 声明命名空间,否则它认为 class 与您的控制器位于同一文件夹中,因为这是您调用它的地方。

包含在 PHP 中的 SQLite3 class 有一个以 'SQLite3' 开头的命名空间,因此通过在顶部声明它,任何对该 [=21= 的引用] 将指向正确的脚本。