New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
How send and process context? #617
Comments
Your message makes no sense. |
@des1roer can you provide some use case or examples of what you trying to do please? |
in graphql exist context https://graphql-modules.com/docs/introduction/context i can use it? |
Yes you can use it: resolve: "@=resolver('myResolver', [args, context])" Russian: Тебе нужно получить доступ к контексту в твоем резолвере? Просто передавай в твоих конфигах переменную context в резолвер, как показано в примере выше. Я там передал в резолвер две переменные args и context. Передавать можно в любом порядке. твой резолвер затем будет выглядет примерно так: public function myResolver($args, $context) {
// ...
} |
russian;
в резолвере
не очень понимаю. т.е. контекст также как параметр передавать? сейчас
|
Короткий ответ: твой запрос никак не изменится. Длинный ответ: Другими словами это: public function resolveItem(
DateTimeImmutable $startDate,
DateTimeImmutable $endDate,
string $retailerReference
): AffiliateClicksAndCommission {
// ...
} никак не связано с этим: {
affiliateClicksAndCommission(
startDate: "2019-10-01T00:00:00+00:00",
endDate: "2019-30-01T00:00:00+00:00",
retailerReference: "some"
) {
# ...
} Все аргументы твоего запроса, всегда сохраняются в переменную [args['startDate'], args['endDate'], args['retailerReference']] А значит твой резолвер должен ожидать 3 аргумента в той же последовательности. Если ты добавишь еще один аргумент в твой конфиг (context), то это будет выглядеть вот так
следовательно и твой php резолвер будет принимать на 1 аргумент больше: public function resolveItem(
DateTimeImmutable $startDate,
DateTimeImmutable $endDate,
string $retailerReference,
$context
): AffiliateClicksAndCommission {
// ...
} Важный момент. Ты можешь отправишь все аргументы разом, нет никакой необходимости отправлять их в резолвер по отдельности. Пример:
а в резолвере уже можешь извлекать нужные тебе аргументы запроса: public function resolveItem($args, $context): AffiliateClicksAndCommission {
$startDate = $args['startDate'];
$nedDate = $args['endDate'];
$retailerReference = $args['retailerReference'];
// ...
} |
@des1roer Я вроде понятно объяснил, что ты не должен менять свой запрос. Зачем ты добавил аргумент с именем context? Контекст - это не аргумент, ты его не создаешь сам. Он создается системой для тебя. Ты можешь сохранять в контекст всякую информацию, чтобы потом в других резолверах получить к ней доступ. |
а сам я не могу записать в контекст? |
@des1roer Не только можешь, но и должен, потому что контекст для этого и предназначен. Он изначально пустой, но записывать в него ты должен внутри резолвера, чтобы потом получить доступ к записанным данным в другом резолвере. Контекст нужен, чтобы иметь какие-то общие данные между всеми резолверами. public function firstResolver($context) {
$context->offsetSet('firstName', 'Alex'); // записываешь данные
$context->offsetSet('lastName', 'Kowalski');
}
public function secondResolver() {
// считываешь данные, записанные в первом резолвере
$firstName = $context->offsetGet('firstName');
$lastName = $context->offsetGet('lastName');
} P.S. Не обязательно использовать методы offsetSet и offsetGet, можно записывать и считывать данные, как с обычным массивом: $context['firstName'] = "Alex"; Я закрываю этот issue, потому что он не имеет ничего общего с этим бандлом. Эти вопросы относятся к GraphQL в целом. |
How send and process context?
The text was updated successfully, but these errors were encountered: