Вы можете сделать это практически из коробки с помощью SilverStripe GraphQL API в SilverStripe 4. В дополнение к ответу 3dgoo , вот вам руководство:
Из конфигурация коробки
SilverStripe предоставляет сервер GraphQL «admin», который требует, чтобы вы вошли в систему, чтобы использовать его. Если вы хотите использовать его с другого сервера, вы можете кодировать base64 свои учетные данные аутентификации basi c и передавать его в качестве заголовка. Подробнее об этом здесь .
Модуль CMS SilverStripe уже предоставляет имя и фамилию участника , поскольку они используются частями CMS через API GraphQL. уже. Если вам нужен адрес электронной почты, вы можете добавить его с помощью некоторого basi c YAML в вашей папке app
.
Добавление поля электронной почты участника
Добавить несколько пользовательских настроек в app/_config
folder - конфигурация в SilverStripe объединена, поэтому значения массива fields: [Email]
будут объединены со значениями CMS, указанными выше
# File: app/_config/graphql.yml
---
Name: appgraphql
---
SilverStripe\GraphQL\Manager:
schemas:
admin:
scaffolding:
types:
SilverStripe\Security\Member:
fields: [Email]
operations:
read: true
Обратите внимание, что я также добавил operations.read: true
к этому, потому что CMS будет Позволяет вам читать участников по одному за раз с помощью операции readOne
. Для вашего случая вы захотите включить read
, который возвращает нумерованный список. Дополнительная информация о доступных операциях .
Проверка вашего запроса
Самый простой способ сделать это - установить GraphiQL (через silverstripe-graphql-devtools) веб-интерфейс (или приложение) для проверки схем GraphQL и выполнения запросов к вашему серверу. Это можно легко сделать с помощью Composer:
composer require --dev silverstripe/graphql-devtools dev-master
Откройте браузер до http://localhost/dev/graphiql?flush
. Замените localhost тем, на чем работает ваш сервер SilverStripe. Вы добавляете ?flush
в строку запроса, чтобы SilverStripe сообщал гриппу sh свой кэш (файлы YAML и PHP), чтобы выбрать новый модуль и конфигурацию.
Когда вы получите редактор запросов GraphiQL, вы можете начните с написания query GetUsers { ... }
, и вы заметите, что при более глубоком вводе запроса он автоматически заполняет доступные вам опции.
Вот запрос для получения адресов электронной почты вашего члена:
query GetUserEmails {
readSilverStripeMembers {
edges {
node {
Email
}
}
}
}
Микро-объяснение: GetUserEmails
- произвольное имя запроса, которое вы создаете. Вам на самом деле не нужно писать один, без него все будет работать нормально. readSilverStripeMembers
- это автоматически запрашиваемое имя запроса, которое происходит потому, что вы включили read: true
в операциях GraphQL. Если вы удалите его и начнете вводить его снова, вы увидите и другие доступные опции, один из которых поставляется с CMS «из коробки» - readOneSilverStripeMember
. Уровни edges
и node
предназначены для разбивки на страницы.
Использование запроса
Мне кажется, что ваш сервер SilverStripe где-то уже работает, и у вас может не быть локальной версии для тестовое задание. Если это так, просто добавив указанную выше конфигурацию YAML в вашу папку app
и развернув ее, будет достаточно, чтобы ваш сервер отправлял электронные письма членам в вызовах администратора GraphQL, тогда вы можете выполнять запросы GraphQL с помощью cURL или чего-то такого:
curl 'http://localhost/admin/graphql/' \ # Adjust to your domain
-H 'Authorization: Basic YWRtaW46YWRtaW4=' \ # This is admin:admin base64 encoded
-H 'Content-Type: application/json' \ # Required for the input data structure
--data-binary '{"query":"query { readSilverStripeMembers { edges { node { Email } } } }","variables":null}'
Пример вывода:
{
"data": {
"readSilverStripeMembers": {
"edges": [
{
"node": {
"Email": "leslie.lawless@example.com"
}
},
{
"node": {
"Email": "mika@example.com"
}
},
{
"node": {
"Email": "sam@example.com"
}
}
]
}
}
}