我想知道如何使用api平台保护自定义项的操作,我在文档中找到了以下代码:
/**
* Secured resource.
*
* @ApiResource(
* attributes={"access_control"="is_granted('ROLE_USER')"},
* collectionOperations={
* "get"={"method"="GET"},
* "post"={"method"="POST", "access_control"="is_granted('ROLE_ADMIN')"}
* },
* itemOperations={
* "get"{"method"="GET","access_control"="is_granted('ROLE_USER') and object.owner == user"}
* }
* )
* @ORM\Entity
*/
Run Code Online (Sandbox Code Playgroud)
但我想做类似的事情:
/**
* @ApiResource(itemOperations={
* "get"={"method"="GET"} //Public route,
* "special"={"route_name"="special", "access_control"="is_granted('ROLE_ADMIN') or object.owner == user"}},
* "special2"={"route_name"="special2", "access_control"="is_granted('ROLE_USER')"}
* })
*/
Run Code Online (Sandbox Code Playgroud)
它行得通吗?还是我必须检查特殊Action文件中的用户角色?
在这种情况下,最佳做法是什么?
我有一个基于 api 平台的应用程序,使用 JWT(和 LexikJWTBundle)具有安全路由。使用 Swagger 接口,可以轻松调用提供有效承载的安全路由。但是使用 GraphiQL 我看不到任何有关安全性的信息,因此当调用安全路由时它会失败。
任何的想法 ?或者我们应该防止在 dev 中使用 graphiql 吗?
谢谢
这是我的情况:
我有一个Article
实体。每篇文章都有一个所有者(a User
)。用户可以拥有许多文章。用户可以通过API发布文章。
我想user_id
基于Bearer令牌自动设置文章的列(我正在使用JWT auth)。
我找不到任何有关如何执行此操作的文档。有人可以帮忙实现此目标吗?
注意:我正在寻找避免可能的情况下避免在Symfony中使用其他扩展(或控制器)的解决方案。我相信Api Platform应该可以使用内置技术来实现这一目标,但是我可能是错的。
这是我的实体:
用户:
<?php
namespace App\Entity;
use ApiPlatform\Core\Annotation\ApiResource;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Symfony\Component\Security\Core\User\UserInterface;
/**
* @ApiResource()
* @ORM\Table(name="users")
* @ORM\Entity(repositoryClass="App\Repository\UserRepository")
* @UniqueEntity(fields="email", message="Email already taken")
*/
class User implements UserInterface, \Serializable
{
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string $password
*
* @ORM\Column(type="string", length=64)
* @Assert\NotBlank()
*/
private $password;
/**
* @var …
Run Code Online (Sandbox Code Playgroud) 我刚刚尝试了https://api-platform.com/docs/core/operations/#recommended-method示例。
Book.class
按照描述生成了CreateBookPublication
班级(1/1) RuntimeException 无法自动装配服务“App\Controller\CreateBookPublication”:方法“__construct()”的参数“$bookPublishingHandler”的类型为“App\Controller\BookPublishingHandler”,但未找到此类。
你有什么主意吗?我想生成一个自己的硬编码响应,没有用于测试目的的学说。
我的设置是 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) 我是 symfony 的新手,但主要是 api 平台。所以我查看了api-platform以了解更多信息。我读了很大部分,信息量很大。但我只是找不到一种方法来使用 openAPI 来获取编辑帖子数据。我也在使用学说和 SQLite
所以我所说的编辑帖子数据是什么意思。我安装了 api-platform 并让它工作(看起来像,this)。我可以在 url www.localhost/api 上使用我的 api-platform POST 数据,然后在 Role 下选择 POST,然后“try out”。我在学说中做了一个小表格,所以我发送给它的 JSON 是;
{
"role": "string"
}
Run Code Online (Sandbox Code Playgroud)
这样就可以了,它将数据添加到我的 SQLite 数据库中。但我想在 PHP 中编辑这些数据。但我就是不知道如何检索这个 JSON 并编辑我从 JSON 中获得的数据。
我所拥有的是;名为 Role 和 RoleRepository 的实体和存储库。我读过一个控制器不需要使用 api-platform 编辑数据。但我无法在任何地方找到如何编辑数据。
那么如何编辑从 JSON 中获得的数据呢?
编辑:如果您想知道我的实体角色是什么样的;
<?php
namespace App\Entity;
use App\Repository\RoleRepository;
use ApiPlatform\Core\Annotation\ApiResource;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
/**
* @ApiResource()
* @ORM\Entity(repositoryClass=RoleRepository::class)
*/
class Role
{
/**
* @ORM\Id
* @ORM\GeneratedValue …
Run Code Online (Sandbox Code Playgroud) 在 API Platform 2.7 中,响应正文包含具有 null 值的字段,升级到 API Platform 3 后,响应正文不包含具有 null 值的字段。这是故意的还是由于我需要进行配置更改。
我从 api/docs 页面为 2.7 和 3.0 执行了相同的调用,我希望结果是相同的。
API Platform 2.7 类 Patient 的响应 { "@context": "/api/contexts/Patient", "@id": "/api/患者/8110", "@type": "Patient", "account": " /api/accounts/8110"、"accountId": 8110、"isDependent": false、"isGuardian": false、"组织": "/api/organizations/765"、"电子邮件": null、"标题": null ,“firstName”:“CA”,“middleInitial”:“A”,“lastName”:“患者”,“后缀”:null,“photoMedia”:null,“sex”:“男性”,“birthDate”:“ 2000-01-01T00:00:00+00:00", "addressLineOne": "5759 Witting Corners", "addressLineTwo": null, "city": "Marvintown", "zipCode": "35507", "state" : { "@id": "/api/states/681", "@type": "州", "缩写": "CA" }, "电话号码": "617-491-0000", "手机号码": null, "工作编号": null }
API Platform 3.0 类 Patient 的响应 { "@context": "/api/contexts/Patient", …
我在 Digital Ocean 上有 docker,并且仍在尝试弄清楚如何使用 api 平台。所以我在端口 80 上的 api-platform-2.3.0 默认页面中的 docker-compose up 正常加载,但是当我转到 8080 时,它显示了错误的网关。所以我查了一下一切是否加载正常,看来 PHP 有问题。
\n\nCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\n0a0c4724d2d5 api_h2-proxy "nginx -g \'daemon of\xe2\x80\xa6" 18 minutes ago Up 18 minutes 0.0.0.0:443-444->443-444/tcp, 80/tcp, 0.0.0.0:8443-8444->8443-8444/tcp api_h2-proxy_1\n9958631ba1b8 quay.io/api-platform/varnish "docker-varnish-entr\xe2\x80\xa6" 18 minutes ago Up 18 minutes 0.0.0.0:8081->80/tcp api_cache-proxy_1\n68de4a5058dd quay.io/api-platform/nginx "nginx -g \'daemon of\xe2\x80\xa6" 18 minutes ago Up 18 minutes 0.0.0.0:8080->80/tcp api_api_1\nf805ffdd804d quay.io/api-platform/php "docker-entrypoint p\xe2\x80\xa6" 18 minutes ago Exited (126) 18 minutes ago api_php_1\nb020f888b81d postgres:9.6-alpine "docker-entrypoint.s\xe2\x80\xa6" 19 …
Run Code Online (Sandbox Code Playgroud) 我在 symfony 4 中使用 api 平台,我有疑问
我想知道如何使用 api 平台创建一个控制器并在 get 中创建 2 个路由
我向您展示我现在所做的事情:
我的控制器:
/**
* @var UnedicPublicationOrderRepository
*/
private $publicationOrderRepository;
public function __construct(UnedicPublicationOrderRepository $publicationOrderRepository)
{
$this->publicationOrderRepository = $publicationOrderRepository;
}
public function __invoke()
{
$cible = $this->publicationOrderRepository->findAll();
return $cible;
}
Run Code Online (Sandbox Code Playgroud)
和我的发布实体
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
use ApiPlatform\Core\Annotation\ApiResource;
/**
* UnedicPublicationOrderController
*
* @ApiResource(
* collectionOperations={"get"={"method"="GET"}},
* itemOperations={
* "get"={"method"="GET", "path"="/publication/{cible}"},
* }
* )
* @ORM\Table(name="foo")
* @ORM\Entity
Run Code Online (Sandbox Code Playgroud) 我正在使用 Symfony 4 和 Api-Platform 开发一个应用程序。
我xxxException
根据这些文档创建了一个自定义错误。我在手术后使用过它,效果很好。
现在我想在访问some-url/api
.
怎样做,才会出现下图这样的情况呢?
api-platform.com ×10
symfony ×7
php ×5
graphql ×2
api ×1
bad-gateway ×1
docker ×1
doctrine ×1
graphiql ×1