您需要向 IOC 容器添加绑定。
https://laravel.com/docs/5.2/container#binding
在 Lumen 中,$app 是容器的一个实例,因此您可以在同一个文件中执行如下绑定:
class Foo
{
public function __construct($name)
{
}
}
$app->bind(Foo::class, function($app){
return new Foo('David');
});
$app->get('/', function () {
return "Ola, mundo! :)";
});
$app->group(['middleware' => 'authAPI', 'prefix' => 'api'], function () use ($app) {
$app->post('v1/payment/create', function(Foo $api){
dd($api);
});
});
您可能想在服务提供商中执行此操作,但由于您的示例代码有一个内联定义的类,我认为这是描述解决方案的最简单方法
编辑以解决$name参数变化很大的情况,有几种方法可以处理它。
抛弃 IOC,只在路由闭包中创建 Foo 实例:
$app->get('blah', function(){
$foo = new Foo('blahblah');
});
$app->get('splarg', function(){
$foo = new Foo('blobblob');
});
更改Foo 并添加setName 方法:
class Foo
{
private $name;
public function setName($name)
{
$this->name = $name;
}
}
$app->get('blah', function(Foo $foo){
$foo->setName('blahblah');
});
$app->get('splarg', function(Foo $foo){
$foo->setName('blobblob');
});
创建一个FooFactory 并注入它:
Class FooFactory
{
public function createFoo($name)
{
return new Foo($name);
}
}
$app->get('blah', function(FooFactory $factory){
$foo = $factory->createFoo('blahblah');
});
$app->get('splarg', function(FooFactory $factory){
$foo = $factory->createFoo('blobblob');
});