PSR-7, интерфейсы и как оно все работает?
Вопрос не имеет отношения к MODX и если это вас возмущает, то заранее простите.
Просто хочу воспользоваться опытом куда более опытных разработчиков и спросить вот о чем.
Есть стандарт PSR-7 который описывает объектную обертку для запросов и ответов сервера.
ссылка www.php-fig.org/psr/psr-7/
Стандарт дает различные интерфейсы с методами для работы с запросом и ответом. вернее только объявления методов. так как это интерфейс.
Есть фреймворки. строго следующие этим стандартам. К примеру Slim.
И вот какие вопросы у меня возникают:
1. Во входной скрипте подключаются интерфейсы, а не классы.
2. В коде я могу обратиться к любому методу, описанному в интерфейсе и он сделает свое дело. К примеру
Но где прописана реализация этих методов из стандарта psr-7? Раз они работают, значит где то должна быть прописана их логика, но в моем коде реализация нигде не прописывается. Кто то знает как это устроено? Реализация прописана в самом php?
Просто хочу воспользоваться опытом куда более опытных разработчиков и спросить вот о чем.
Есть стандарт PSR-7 который описывает объектную обертку для запросов и ответов сервера.
ссылка www.php-fig.org/psr/psr-7/
Стандарт дает различные интерфейсы с методами для работы с запросом и ответом. вернее только объявления методов. так как это интерфейс.
Есть фреймворки. строго следующие этим стандартам. К примеру Slim.
И вот какие вопросы у меня возникают:
1. Во входной скрипте подключаются интерфейсы, а не классы.
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
Но при этом в программе я могу обращаться к объекту request и к его методам. Как так то? Это у меня огромный пробел в знаниях и только интерфейса достаточно чтобы иметь объект?2. В коде я могу обратиться к любому методу, описанному в интерфейсе и он сделает свое дело. К примеру
$app->get('/',function(Request $request, Response $response, $args) {
$result = $request->getQueryParams();
$twig = $this->get('twig');
$str = $twig->render('index.tpl',['name'=>$result['name']]);
$response->getBody()->write($str);
return $response;
});
Тоесть у запроса я могу обратиться к методу getQueryParams(), а у ответа к getBody()Но где прописана реализация этих методов из стандарта psr-7? Раз они работают, значит где то должна быть прописана их логика, но в моем коде реализация нигде не прописывается. Кто то знает как это устроено? Реализация прописана в самом php?
Комментарии: 4
В комментарии это не обьяснишь. Попробуй почитать тут. Но ты как-то широко шагнул. Сначала нужно базовые знания получить, а потом усложнять.
Интерфейсы дают малую связанность. Т.е. ты можешь подсунуть в метод любой класс, соответствующий определенным требованиям. За это как раз и отвечает интерфейс.
Интерфейсы дают малую связанность. Т.е. ты можешь подсунуть в метод любой класс, соответствующий определенным требованиям. За это как раз и отвечает интерфейс.
Но где прописана реализация этих методов из стандарта psr-7?У того же Slim эти классы пробрасываются при инициализации приложения. В нем жестко прописана проверка наличия нескольких пакетов. Сначала свой пакет, потом Guzzle и ещё какие то. Не помню. Но можно и самому инстанциировать любой свой класс запроса или ответа. Главное, чтобы соответствовал интерфейсу. Иначе будет ошибка.
Есть фреймворки. строго следующие этим стандартам. К примеру Slim.Тройка ещё не соответствует. Например, $response->toJson() не соответствует стандарту. А вот четверка поддерживает почти все текущие утвержденные стандарты. После тройки приходится привыкать. И всякие методы обработки запроса и ответа выносить на сервисный уровень.
Да вы правы, тут сложно ответить в формате комментария.
Да и мои вопросы они странные что ли.
Может сильно полагаюсь на возможности phpStorm и его анализ классов и нужно пройти жизненный путь приложения от начала до конца. Но признаюсь, синтаксис в slim4 мне сложноват, он прям на полную использует все нововведения седьмых версий php и часто этот синтаксис сложно читать.
Я на данном этапе решил, что методы из интерфейса psr-7 (и psr-15 ) вшиты в сам php. Как например методы PDO. Ведь для работы с PDO не нужно реализовывать методы, мы просто к ним обращаемся.
Да и мои вопросы они странные что ли.
У того же Slim эти классы пробрасываются при инициализации приложения.В том то и дело что в 4 версии я не вижу классов от которых создан объект response или request
Может сильно полагаюсь на возможности phpStorm и его анализ классов и нужно пройти жизненный путь приложения от начала до конца. Но признаюсь, синтаксис в slim4 мне сложноват, он прям на полную использует все нововведения седьмых версий php и часто этот синтаксис сложно читать.
Я на данном этапе решил, что методы из интерфейса psr-7 (и psr-15 ) вшиты в сам php. Как например методы PDO. Ведь для работы с PDO не нужно реализовывать методы, мы просто к ним обращаемся.
Мы раньше вроде были на «ты». Я так постарел?
Обрати внимание на метод $app->run();
В нём вызываются конкретные классы. Причем, если не указан конкретный реквест, то он определяется автоматически по установленным пакетам (я выше писал).
Обрати внимание на метод $app->run();
В нём вызываются конкретные классы. Причем, если не указан конкретный реквест, то он определяется автоматически по установленным пакетам (я выше писал).
Но признаюсь, синтаксис в slim4 мне сложноват, он прям на полную использует все нововведения седьмых версий phpА мне безумно нравится. В пекло PHP 5. ))
Я на данном этапе решил, что методы из интерфейса psr-7 (и psr-15 ) вшиты в сам php.Найн. Ю а ронг.
Найн. Ю а ронг.Понял, буду разбираться) Спасибо.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.