gpt4 book ai didi

php - 如何使用 Slim-Skeleton 中演示的 PHP-DI 设置访问 slim4 的 routeParser?

转载 作者:行者123 更新时间:2023-12-04 14:45:35 25 4
gpt4 key购买 nike

我已经根据 SlimPHP 团队的 Slim Skeleton 设置了一个新的应用程序应用。在我的路由定义中,我希望能够以 described in the Slim4 documentation 访问路由解析器。 .因此,例如,我希望能够编辑骨架的 app/routes.php文件是这样的:

    $app->get('/', function (Request $request, Response $response) {
$routeParser = $app->getRouteCollector()->getRouteParser(); // this doesn't work
$response->getBody()->write('Hello world! ' . $routeParser->urlFor('something'));
return $response;
});

$app->getRouteCollector()->getRouteParser() 不起作用是有道理的,因为 $app 未在此处定义。但我认为我们应该改为调用 $this->getRouteCollector()->getRouteParser();,但这会给出错误:"Call to undefined method DI\\Container: :getRouteCollector()"

显然,我的困惑似乎是关于依赖注入(inject),这对我来说是新的,而且对我来说不是很自然。老实说,我很想在其他地方(在 index.php 中?)定义 $routeParser 变量,这样我就可以在任何路由定义中访问它,而不必每次都调用 $app->getRouteCollector()->getRouteParser() 。但此刻我会满足于任何有效的方法。

最佳答案

Slim skeleton 实际上是一个演示你需要实现什么的例子。创建 App 实例后 in index.php , 有一个这样的赋值:

// Instantiate the app
AppFactory::setContainer($container);
$app = AppFactory::create();
$callableResolver = $app->getCallableResolver();

你也可以这样做:

$routeParser = $app->getRouteCollector()->getRouteParser();

如果你真的需要这个 RouteParser 实例在每个路由回调中可用,你可以把它放在依赖容器中,比如:

$container->set(Slim\Interfaces\RouteParserInterface::class, $routeParser);

然后您可以使用 PHP-DI Autowiring 功能将此 RouteParser 注入(inject)到 Controller 构造函数中:

use Slim\Interfaces\RouteParserInterface;
class SampleController {
public function __construct(RouteParserInterface $routeParser) {
$this->routeParser = $routeParser;
//...
}
}

或者如果您需要在任何路由回调中调用 $container->get():

$app->get('/', function (Request $request, Response $response) {
$routeParser = $this->get(Slim\Interfaces\RouteParserInterface::class);
$response->getBody()->write('Hello world! ' . $routeParser->urlFor('something'));
return $response;
});

关于php - 如何使用 Slim-Skeleton 中演示的 PHP-DI 设置访问 slim4 的 routeParser?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59619722/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com