【发布时间】:2016-06-10 13:32:54
【问题描述】:
如果您想在中间件中拥有另一个中间件/对象 你必须使用像
这样的工厂namespace App\Somnething;
use Interop\Container\ContainerInterface;
class MyMiddlewareFactory
{
public function __invoke(ContainerInterface $container, $requestedName)
{
return new $requestedName(
$container->get(\App\Path\To\My\Middleware::class)
);
}
}
所以MyMiddleware 将被注入\App\Path\To\My\Middleware 并且我们将能够访问它。
问题: 用应用程序本身或容器注入中间件会不会是错误的?喜欢:
namespace App\Somnething;
use Interop\Container\ContainerInterface;
use Zend\Expressive\Application;
class MyMiddlewareFactory
{
public function __invoke(ContainerInterface $container, $requestedName)
{
return new $requestedName(
$container->get(Application::class)
);
}
}
这样就可以随时获得任何东西。 喜欢
namespace App\Somnething;
use Zend\Expressive\Application;
class MyMiddleware
{
/** @var Application $app */
protected $app;
public function __construct(Application $app)
{
$this->app = $app;
}
public function __invoke($some, $thing)
{
if ($some and $thing) {
$ever = $this->app
->getContainer()
->get(\Path\To\What\Ever::class);
$ever->doSome();
}
}
}
【问题讨论】:
标签: zend-framework dependency-injection factory mezzio