[英]Graphql Custom type-definition Laravel Lighthouse gives error about missing subClass
我復制了 Lighthouse 網站鏈接到的示例(https://webonyx.github.io/graphql-php/type-system/scalar-types/ )用於自定義電子郵件類型。 (見下面的代碼)
不幸的是,如果我現在轉到 graphql-playground,我會收到一個 500 錯誤,指出:“沒有找到匹配的 GraphQL\\Type\\Definition\\ScalarType 子類的標量電子郵件”
我該如何解決這個錯誤?
<?php
// file: /graphql/EmailType.php
namespace MyApp;
use GraphQL\Error\Error;
use GraphQL\Error\InvariantViolation;
use GraphQL\Language\AST\StringValueNode;
use GraphQL\Type\Definition\ScalarType;
use GraphQL\Utils\Utils;
class EmailType extends ScalarType
{
// Note: name can be omitted. In this case it will be inferred from class name
// (suffix "Type" will be dropped)
public $name = 'Email';
/**
* Serializes an internal value to include in a response.
*
* @param string $value
* @return string
*/
public function serialize($value)
{
// Assuming internal representation of email is always correct:
return $value;
}
/**
* Parses an externally provided value (query variable) to use as an input
*
* @param mixed $value
* @return mixed
*/
public function parseValue($value)
{
if (!filter_var($value, FILTER_VALIDATE_EMAIL)) {
throw new Error("Cannot represent following value as email: " . Utils::printSafeJson($value));
}
return $value;
}
/**
* Parses an externally provided literal value (hardcoded in GraphQL query) to use as an input.
*
* E.g.
* {
* user(email: "user@example.com")
* }
*
* @param \GraphQL\Language\AST\Node $valueNode
* @param array|null $variables
* @return string
* @throws Error
*/
public function parseLiteral($valueNode, array $variables = null)
{
// Note: throwing GraphQL\Error\Error vs \UnexpectedValueException to benefit from GraphQL
// error location in query:
if (!$valueNode instanceof StringValueNode) {
throw new Error('Query error: Can only parse strings got: ' . $valueNode->kind, [$valueNode]);
}
if (!filter_var($valueNode->value, FILTER_VALIDATE_EMAIL)) {
throw new Error("Not a valid email", [$valueNode]);
}
return $valueNode->value;
}
}
(編輯:看看下面 Enzo Notario 的評論,以獲得真正的解決方案)
我通過以下方式解決了這個問題:
在“composer.json”中,我將文件夾“graphql”(EmailType 類文件所在的文件夾)添加到“autoload”中的文件夾列表中:
"autoload": {
"psr-4": {
"App\\": "app/"
},
"classmap": [
"database/seeds",
"database/factories",
"graphql"
]
},
然后我使用了以下命令(我很確定不需要最后一行):
php artisan clear-compiled
composer dumpautoload
composer update
在此之后 al 按預期工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.