在 Laravel 之外使用 Laravel Facade

2024-01-24

我有一个 Laravel 应用程序,我将其用作 Joomla 中构建的更大应用程序的 API。我真的很喜欢使用 Laravel,并决定在 Joomla 应用程序中使用 Eloquent。我通过导入来实现这个工作bootstrap\autoload.php在 Laravel 应用程序中创建一个文件并创建一个Capsule

require JPATH_ROOT.'/../laravel_app/bootstrap/autoload.php';

$capsule = new Capsule();
$config = new JConfig();

$capsule->addConnection([
    'driver'    => 'mysql',
    'host'      => $config->host,
    'database'  => $config->db,
    'username'  => $config->user,
    'password'  => $config->password,
    'charset'   => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix'    => $config->dbprefix,
    'strict'    => false
]);

$capsule->setAsGlobal();
$capsule->bootEloquent();

这很好用,我可以使用 Eloquent。它直接从应用程序加载 Eloquent 模型。

我想知道的是如何让 Laravel 应用程序的其余部分在我的 Joomla 应用程序中工作,包括使用Facades.

例如我使用Config.get('key')在 Eloquent 模型之一中,在 Laravel 中调用时工作正常,但在 Joomla 中调用时会抛出错误。

Fatal error: Class 'Config' not found in laravel_app/app/Model.php on line 192

我看过laravel_site/public/index.php看看它如何启动应用程序,到目前为止,这似乎是一个可行的解决方案:

require JPATH_ROOT.'/../laravel_site/bootstrap/autoload.php';
$app = require_once JPATH_ROOT.'/../laravel_site/bootstrap/app.php';

$kernel = $app->make('Illuminate\Contracts\Http\Kernel');

$response = $kernel->handle(
    $request = Illuminate\Http\Request::capture()
);

//$response->send();

//$kernel->terminate($request, $response);

现在,外墙似乎运行良好。我故意遗漏了$response->send(); and $kernel->terminate($request, $response);这样路由就不会发生并覆盖 Joomla 自己的路由。

我也不再需要实例化Capsule因为 Laravel 现在正在为我做这件事。

我还没有对此进行全面测试,所以我不知道它有多强大或哪些功能可以工作,但到目前为止一切都很好。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Laravel 之外使用 Laravel Facade 的相关文章

随机推荐