Slim php 容器设置

问题描述 投票:0回答:1

我对 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 视频教程,阅读了所有文档。由于不了解什么,我只需要一个基本的容器来工作,这样我就可以亲自理解它并对其进行调整,提前感谢您的耐心。

php slim
1个回答
0
投票

为了让事情顺利进行,我建议您采取以下步骤:

  1. 在项目的根目录下创建一个
    settings.php
    文件。 比如:
<?php

return [
    'settings' => [
        'slim' => [
            'displayErrorDetails' => true,
            'logErrors' => true,
            'logErrorDetails' => true,
        ],
    ],
    // The rest of your container settings go here
];

  1. 在包含应用程序容器的项目根目录下创建一个
    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
。请记住,您必须对其进行设置并将其添加到容器中。无论您想要什么配置。

  1. 现在您可以在
    index.php
    文件夹中创建
    public
    文件,并创建您的应用程序:
require __DIR__ . '/../bootstrap.php';

AppFactory::setContainer($container);

$app = AppFactory::create();
  1. 请注意,您必须在
    composer.json
    中配置命名空间自动加载,如下所示:
    ...
    "autoload": {
        "psr-4": {
            "Slim\\": "Slim",
            "App\\": "src/",
            "Test\\": "tests/"
        }
    },
    ...
  1. 创建控制器并注意您使用的命名空间。他们有点棘手。
© www.soinside.com 2019 - 2024. All rights reserved.