我有兩個物體,Offer 和 Candidate,它們之間存在 OneToMany 關系。相關代碼部分如下:
在 Offer.php 中:
/**
* @ORM\OneToMany(targetEntity=Candidate::class, mappedBy="offer", orphanRemoval=true)
*/
private $candidates;
public function __construct()
{
$this->candidates = new ArrayCollection();
}
在 Candidate.php 中:
/**
* @ORM\ManyToOne(targetEntity=Offer::class, inversedBy="candidates")
* @ORM\JoinColumn(nullable=false)
*/
private $offer;
在 OfferCrudController.php 中:
public function configureFields(string $pageName): iterable
{
return [
ArrayField::new('candidates', new TranslatableMessage('easyadmin.candidates'))
->onlyOnDetail(),
AssociationField::new('candidates', new TranslatableMessage('easyadmin.candidates'))
->onlyOnIndex()
];
}
在 CandidateCrudController.php 中:
public function configureFields(string $pageName): iterable
{
return [
AssociationField::new('offer', new TranslatableMessage('easyadmin.candidate.offer'))
];
}
我的問題是,雖然對于候選人 EasyAdmin 顯示鏈接到每個候選人的詳細資訊頁面的報價,但對于報價,它僅顯示候選人的不可點擊的字串表示形式,如圖所示:


是否也可以顯示候選人及其詳細資訊頁面的相應鏈接?
uj5u.com熱心網友回復:
是的,這是可能的,但您應該為此創建一個自定義模板。假設您創建了/templates/admin/field/offer/detail/candidates.html.twig. 然后OfferCrudController需要為candidates欄位*設定創建的模板:
public function configureFields(string $pageName): iterable
{
// ...
yield AssociationField::new('candidates', 'Candidates')->onlyOnDetail()
->setTemplatePath('admin/field/offer/detail/candidates.html.twig');
}
- 帶有生成器的示例,但它可以很容易地撰寫為陣列項,就像在您的示例中一樣(而不是 ArrayField)。我只是更喜歡在這種情況下使用生成器,因為這樣配置起來更方便。
在模板中為每個物體生成 URL:
# /templates/admin/field/offer/detail/candidates.html.twig
{% if field.value is not empty %}
{% for candidate in field.value %}
{% set candidateDetailUrl = ea_url()
.setController('App\\Controller\\Admin\\CandidateCrudController')
.setAction(constant('EasyCorp\\Bundle\\EasyAdminBundle\\Config\\Action::DETAIL'))
.setEntityId(candidate.id)
%}
<a href="{{ candidateDetailUrl }}" style="display: block">
{{ candidate.name }}
</a>
{% endfor %}
{% else %}
No candidates
{% endif %}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/490281.html
