Настройка построителя запросов с подсветкой - Uncaught RuntimeException: корень фасада не был установлен - PullRequest
0 голосов
/ 07 мая 2018

Я пытаюсь настроить построитель запросов Illuminate, чтобы я мог выполнять такие запросы, как "DB :: table ('table') -> where (...)" .. однако я не могу заставить его работать.

Я скачал через Laravel композитор (требуется laravel / laravel). Затем я создал index.php, где я включаю файл автозагрузки композитора. После этого я пытаюсь вызвать простой запрос:

\Illuminate\Support\Facades\DB::table('users')->get();

Однако выдается исключение «Uncaught RuntimeException: корень фасада не был установлен». Я не ожидал, что это сработает сразу, потому что я не указал соединение с базой данных. Но, основываясь на сообщении об этом исключении, я не очень умен.

Я нашел решение здесь на SO, чтобы поставить его перед использованием построителя запросов:

$Capsule = new Capsule;
$Capsule->addConnection(config::get('database'));
$Capsule->setAsGlobal();
$Capsule->bootEloquent();

Однако оператор config::get('database') также выдает то же исключение. Это значит, что мне, вероятно, тоже нужно как-то настроить конфиг.

Я попытался включить загрузчик Laravel и загрузить его, но это ничего не меняет.

$app = require_once '\composer\vendor\laravel\laravel\bootstrap\app.php';
$app->boot();

Затем я попытался установить приложение фасада Config с помощью этого оператора: Config::setFacadeApplication($app) После этого, когда я пытаюсь вызвать Config :: get ('database'), оно выдает другое исключение Uncaught ReflectionException: Class config does not exist

Теперь у меня нет идей, как заставить это работать. Что мне здесь не хватает?

1 Ответ

0 голосов
/ 07 мая 2018

Решено путем расширения класса Application и определения экземпляров config и db в функции начальной загрузки, например:

use Illuminate\Config\Repository;
use Illuminate\Database\Connectors\ConnectionFactory;
use Illuminate\Database\DatabaseManager;
use Illuminate\Foundation\Application;

class LaravelApp extends Application
{

    function boot()
    {
        parent::boot();

        $this->instance('config', new Repository(['database' => $this->getDBCfg()]));
        $this->instance('db', new DatabaseManager($this, new ConnectionFactory($this)));
    }

    private function getDBCfg(){
        return [

            'default' => env('DB_CONNECTION', 'mysql'),

            'connections' => [

                'mysql' => [
                    'driver' => 'mysql',
                    'host' => env('DB_HOST', 'localhost'),
                    'port' => env('DB_PORT', '3306'),
                    'database' => env('DB_DATABASE', 'test'),
                    'username' => env('DB_USERNAME', 'root'),
                    'password' => env('DB_PASSWORD', ''),
                    'unix_socket' => env('DB_SOCKET', ''),
                    'charset' => 'utf8mb4',
                    'collation' => 'utf8mb4_unicode_ci',
                    'prefix' => '',
                    'strict' => true,
                    'engine' => null,
                ],

            ],

        ];
    }
}

Код клиента выглядит так:

$laravelApp = new LaravelApp(__DIR__);
$laravelApp->boot();
Config::setFacadeApplication($laravelApp);
var_dump(\Illuminate\Support\Facades\DB::table('test')->get());

Спасибо за помощь в комментариях

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...