Ссылка на использование Slim3 неверна - PullRequest
0 голосов
/ 12 июня 2019

Я пытаюсь подготовить простое пустое приложение с Slim3 и композитором.

Это мой фронт-контроллер:

<?php

require '../vendor/autoload.php';


    $config=[];
    $config['displayErrorDetails'] = true;
    $config['addContentLengthHeader'] = false;
    $app = new \Slim\App(['settings' => $config]);

    foreach(glob("../app/dependencies/*.php") as $dependency){
        $dependency=include $dependency;
        $dependency($app);
    }
    foreach(glob("../app/middleware/*.php") as $middleware){
        $middleware=include $middleware;
        $middleware($app);
    }
    foreach(glob("../app/routes/*.php") as $route){
        $route=include $route;
        $route($app);
    }

    $app->run();

И у меня есть уникальный файл маршрута:

<?php 

return function (\Slim\App $app){
    $app->get('/', function (Request $request, Response $response) {
        $response->getBody()->write("Hello");
        return $response;
    });
};

Когда я запускаю приложение, я получаю сообщение об ошибке:

Аргумент 1, переданный в Closure :: {closure} () должен быть экземпляром Request, экземпляром Slim \Http \ Request уделено

Я должен добавить это "использование" в мой файл маршрута:

use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;

Почему php использует неправильный (Slim) класс для запроса и ответа?Неужели я должен их префикс для каждого файла контроллера?

1 Ответ

0 голосов
/ 12 июня 2019

Неужели я должен префиксировать их для каждого файла контроллера?

Да. use декларации на файл, как , документированные в руководстве по PHP :

Правила импорта основаны на файлах, то есть включенные файлы НЕ наследуют правила импорта родительского файла.


Вы можете или не можете не указывать тип перед параметром. Способность сделать это зависит от того, использует ли Слим Reflection, чтобы определить, нужно ли поместить объект $request и $response. Исходя из полученного сообщения об ошибке, я полагаю, вы можете просто удалить тип.

...