故事
我们以此请求https://nike.awesomedomainname.com/为例.我需要一个可以获取的服务nike.
我现在有什么
我有一个从服务器获取路由器密钥的服务@request_stack.让我们使用公司作为路由器密钥.
我的主要路线如下;
<import host="{company}.domain.{_tld}" prefix="/" schemes="https" resource="@ExampleBundle/Resources/config/routing.xml">
<default key="_tld">%app_tld%</default>
<requirement key="_tld">com|dev</requirement>
<requirement key="company">[a-z0-9]+</requirement>
</import>
Run Code Online (Sandbox Code Playgroud)
所以我写了这个服务来获取密钥并搜索公司;
...
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RequestStack;
class CompanyContextRequest {
protected $request;
protected $companyRepository;
public function __construct(RequestStack $requestStack, CompanyRepository $companyRepository) {
$this->request = $requestStack->getMasterRequest();
$this->companyRepository = $companyRepository;
}
public function getCompany()
{
if (null !== $this->request)
{
$company = $this->request->attributes->get('company');
if (null !== $company)
{
return $this->companyRepository->findOneBy([
'key' => $company
]);
}
}
}
....
}
Run Code Online (Sandbox Code Playgroud)
和服务xml定义;
<service …Run Code Online (Sandbox Code Playgroud) 我的设置是 Symfony 5,最新的 API-Platform 版本在 PHP 7.3 上运行。所以我希望能够查询姓名和用户名(甚至可能是电子邮件)。我需要编写自定义解析器吗?
这是我到目前为止所尝试的,但这导致 WHERE name = $name AND username = $name。
query SearchUsers ($name: String!) {
users(name: $name, username: $name) {
edges {
cursor
node {
id
username
email
avatar
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的实体:
/**
* @ApiResource
* @ApiFilter(SearchFilter::class, properties={
* "name": "ipartial",
* "username": "ipartial",
* "email": "ipartial",
* })
*
* @ORM\Table(name="users")
* @ORM\Entity(repositoryClass="Domain\Repository\UserRepository")
* @ORM\HasLifecycleCallbacks()
*/
class User
{
private $name;
private $username;
private $email;
// ... code omitted ... …Run Code Online (Sandbox Code Playgroud)