Laravel Bridge 在 Slim 框架上的应用

v1.1.0 2020-10-27 16:06 UTC

This package is auto-updated.

Last update: 2024-08-24 11:47:19 UTC


README

用于 Slim 框架的 Laravel Bridge

tests codecov codecov Latest Stable Version Total Downloads License

在 Slim 框架中实现 Laravel 的桥梁

安装

使用 Composer 安装包

composer require laravel-bridge/slim

使用数组作为容器

应用程序参数是数组,如下代码所示。

use Slim\App;

$container = [
    SomeClass::class => function() {},
]

$app = new App($container);

将类名 Slim\App 替换为桥梁类 LaravelBridge\Slim\App

// Rename use class
use LaravelBridge\Slim\App;

它将在大多数 Slim 项目上工作。这里有一个示例,更详细的信息。

使用容器

应用程序参数是容器,如下代码所示。

use Slim\App;
use Slim\Container;

$container = new Container();
$container[SomeClass::class] = function() {};

$app = new App($container);

使用 ContainerBuilder 对于这种情况很好。构建器将构建一个 Scratch 应用程序 实例。

use LaravelBridge\Slim\ContainerBuilder;
use Slim\App;

$containerBuilder = new ContainerBuilder();

// Use builder mixin the Scratch Application / Laravel Container
$containerBuilder->singleton(SomeClass::class, function() {});

$containerBuilder->setupDatabase($conncetion)
    ->setupProvider(YourProvider::class);

// Register provider for Slim Framework
$containerBuilder
    ->useLaravelFoundHandler()
    ->useLaravelHttp();

// Build Container and bootstrap
$container = $containerBuilder->buildAndBootstrap();

$app = new App($container);

或者,ContainerBuilder 也可以使用 Pimple / Slim 容器。

use LaravelBridge\Slim\ContainerBuilder;
use Slim\App;
use Slim\Container;

$slimContainer = new Container();
$slimContainer['foo'] = 'bar';

$containerBuilder = new ContainerBuilder($slimContainer);

// Build Container and bootstrap
$container = $containerBuilder->buildAndBootstrap();

$container->make('foo') // Will return 'bar'

使用 Laravel 服务

LaravelBridge\Slim\App 将使用 Slim 默认服务(例如 Slim\Handlers\Error)。如果您想使用 Laravel 错误处理器,可以设置第二个参数。它将使用在此桥梁中定义的所有 Laravel 服务。

use LaravelBridge\Slim\App;

$app = new App([], true);

ContainerBuilder 类似于桥梁应用

use LaravelBridge\Slim\ContainerBuilder;

$app = new ContainerBuilder([], true);

foundHandler

Slim 中的 foundHandler 在找到路由时被调用。

此桥梁实现了一个自动注入处理器,用于调用可调用对象,命名为 RequestResponse。使用 Laravel 服务或调用 ContainerBuilder::useLaravelFoundHandler() 启用处理器。

$container = (new ContainerBuilder())
    ->useLaravelFoundHandler()
    ->buildAndBootstrap();

$app = new App($container);

$app->get('/', function (IlluminateRequest $request, $args) {
    // Auto-inject Illuminate Request in clousre
});

callableResolver

此桥梁实现了一个自动注入处理器,用于创建新的控制器,命名为 CallableResolver。使用 Laravel 服务或调用 ContainerBuilder::useLaravelCallableResolver() 启用。

class SomeController
{
    public function __construct(Dep $dep) {}

    public function __invoke() {}

    public function view() {}
}


$container = (new ContainerBuilder())
    ->useLaravelCallableResolver()
    ->buildAndBootstrap();

$app = new App($container);

// Will call SomeController::__invoke()
$app->get('/', 'SomeController');

// Will call SomeController::view()
$app->get('/', 'SomeController:view');

设置

Laravel Bridge 使用默认的 Collection 类。使用 Laravel 服务 或在 ContainerBuilder 上调用 useLaravelSettings() 方法将使用 Illuminate\Config\Repository 类。

$container = (new ContainerBuilder())
    ->setSettings(['foo' => 'bar'])
    ->useLaravelSettings()
    ->buildAndBootstrap();

// Return a Repository instance
$container->get('settings');