laravel-bridge/slim
Laravel Bridge 在 Slim 框架上的应用
Requires
- php: ^7.1
- ext-json: *
- http-interop/http-factory-slim: ^2.0
- illuminate/container: ^5.6 | ^6 | ^7
- illuminate/support: ^5.6 | ^6 | ^7
- laravel-bridge/container: ^1.1
- laravel-bridge/scratch: ^1.6
- laravel-bridge/support: ^1.0
- mileschou/psr: ^1.0
- psr/container: ^1.0
- psr/http-factory: ^1.0
- slim/slim: ^3.0
- symfony/debug: ^4.4 | ^5
- symfony/psr-http-message-bridge: ^1.3 | ^2.0
Requires (Dev)
- illuminate/config: ^5.6 | ^6 | ^7
- illuminate/http: ^5.6 | ^6 | ^7
- phpstan/phpstan: ^0.12
- phpunit/phpunit: ^7 | ^8 | ^9
- psy/psysh: ^0.10.2
- squizlabs/php_codesniffer: ^3.5
Suggests
- illuminate/config: Suggest when use Laravel settings
- illuminate/http: Suggest when use Laravel or Symfony request instance
README
用于 Slim 框架的 Laravel Bridge
在 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');