我对 slim php 还很陌生,我想了解容器,但运气不太好,我很努力地完成它,但仍然一无所获。
--api
--src
--Controllers
--HomeController.php
--public
--.htaccess
--index.php
.htaccess
index.php
use DI\Container;
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
use Slim\Factory\AppFactory;
use api\Controllers\HomeController;
use Psr\Container\ContainerInterface;
require __DIR__ . '/../vendor/autoload.php';
$container = new Container();
AppFactory::setContainer($container);
$app = AppFactory::create();
$app->setBasePath('/api');
$container->set('HomeController', function (ContainerInterface $container) {
$view = $container->get('view');
return new HomeController($view);
});
$app->get('/', \HomeController::class . ':home');
$app->run();
HomeController.php
namespace api\Controllers;
use Psr\Container\ContainerInterface;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
class HomeController
{
private $container;
public function __construct(ContainerInterface $container)
{
$this->container = $container;
}
public function home(ServerRequestInterface $request, ResponseInterface $response, array $args): ResponseInterface
{
$response->getBody()->write('hello');
return $response;
}
}
我尝试了所有 YouTube 视频教程,阅读了所有文档。由于不了解什么,我只需要一个基本的容器来工作,这样我就可以亲自理解它并对其进行调整,提前感谢您的耐心。
为了让事情顺利进行,我建议您采取以下步骤:
settings.php
文件。
比如:<?php
return [
'settings' => [
'slim' => [
'displayErrorDetails' => true,
'logErrors' => true,
'logErrorDetails' => true,
],
],
// The rest of your container settings go here
];
bootstrap.php
文件,您可以在此处进行配置。一个例子是这样的:require_once __DIR__ . '/vendor/autoload.php';
$container = new Container(require __DIR__ . '/settings.php');
您可以向容器添加更多单例:
$container->set(DefaultController::class, function (Container $c) {
return new DefaultController($c->get(EntityManager::class));
});
这样您就可以在控制器中使用
EntityManager
。请记住,您必须对其进行设置并将其添加到容器中。无论您想要什么配置。
index.php
文件夹中创建 public
文件,并创建您的应用程序:require __DIR__ . '/../bootstrap.php';
AppFactory::setContainer($container);
$app = AppFactory::create();
composer.json
中配置命名空间自动加载,如下所示: ...
"autoload": {
"psr-4": {
"Slim\\": "Slim",
"App\\": "src/",
"Test\\": "tests/"
}
},
...