Symfony api-платформа: пользователь должен извлекать свои собственные объекты

#symfony #api-platform.com

#symfony #api-platform.com

Вопрос:

У меня есть этот объект

 /**
 * @ApiResource()
 * @ORMEntity(repositoryClass="AppRepositoryFeedRepository")
*/
class Feed implements AuthoredEntityInterface
{
/**
 * @ORMId()
 * @ORMGeneratedValue()
 * @ORMColumn(type="integer")
 */
private $id;

/**
 * @ORMManyToOne(targetEntity="AppEntityUser", inversedBy="myFeeds")
 * @ORMJoinColumn(nullable=false)
 */
private $user;

/**
 * @ORMColumn(type="string", length=255)
 */
private $name;

/**
 * @ORMColumn(type="string", length=2083, unique=true)
 */
private $url;

// various getters and setters

}
  

используя созданный мной интерфейс AuthoredEntityInterface, я могу автоматически назначить пользователя зарегистрированным пользователем.

Мне нужно было бы знать, как настроить collectionOperations, поэтому, когда я войду в систему как пользователь с id = 1, при вызове / api / feeds я буду извлекать элементы только с user = 1. Если это возможно, я хотел бы сделать это с аннотацией, в противном случае подойдет любой другой метод.

Спасибо.

Ответ №1:

Если это только для подключенного пользователя, вам нужно текущее расширение пользователя (расширение doctrine). В противном случае вам необходимо создать ссылку «дополнительный ресурс».

Ссылка на расширение и на дополнительный ресурс.

Наслаждайтесь 🙂 (и спасибо timisorean за обзор)

Комментарии:

1. Спасибо, Флориан, я одобрил этот ответ, потому что, просматривая документацию, это именно то, что я искал (расширение). Однако по какой-то причине расширение не запускается, даже если я запускаю консоль debug: container, я вижу, что оно правильно зарегистрировано. Есть идеи? Спасибо.

2. Здесь мне нужно больше информации… правильно ли зарегистрировано ваше расширение в services.yaml? У вас есть git, который я могу клонировать?

3. конечно: bitbucket.org/msechi/symfony4-api-platform-test/branch /… спасибо

4. Я видел ваш тест (печать 12345), вы не можете протестировать расширение doctrine таким образом. То, что вы делаете в этих функциях, не возвращается. Он запускается перед выполнением sql. Попробуйте принудительно зарегистрировать в services.yaml. Удалите if в addWhere и правильно установите $user. и … удачи 🙂