Bonjour
J'essaie d'obtenir des données pour un script JS qui est un modal affichant des données contenues dans un objet Folder
J'ai créé un controller pour afficher l'objet Folder dans une vue twig
Dans ma vue twig je peux lister tous les éléments (entités) enfants de Folder dans ma vue twig sans problème :
bars, bars ,quxes
(boards, categories, elements)
L'objet Folder s'affiche sous la forme d'une carte avec des tabs pour les éléments enfants
bars, bars ,quxes
(boards, categories, elements)
Dans le Tab Boards j'ai une boucle for qui affiche les elements inclus
Si je choisi un des éléments j'ouvre un modal affichant le nom et la description
le question est ici :
Comment construire en Js :
une variable pour le nom du Board : barname
et une autre pour la description du Board : bardescription
pour quelle soient lues dans mon modal.
j'ai deja créé un service twig "menubar "pour accéder au données je men sert depuis le menu sidebar où j'affiche les Folders (foo)
Controller
To Display selected Folder with included elements :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 #[Route('/folder', name: 'folder_')] class FooController extends AbstractController { #[Route('/{id}/show', name: 'show', methods: 'GET')] public function show(Foo $foo): Response { return $this->render('foo/show.html.twig', [ 'foo' => $foo, ]); } }
Boards => Categories => Elements by Tabs
Twig Tab Boards
Code twig : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 <div class="tab-pane fade" id="pills-boards" role="tabpanel" aria-labelledby="pills-boards-tab"> <p> {% for bar in foo.bars %} <p><button type="button" class="alert_demo_2 btn btn-secondary" id=""> {{bar}} </button></p> {% endfor %} </p> </div>
Button Tab Boards call a Modal via javascript which must contain fields :
Name
and
Description
of the Board
Js
In red : twig compatibles variables needed to display the expected data representing :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 <script> var barname = '{{ }}'; var bardescription = '{{ }}'; //== Class definition var SweetAlert2Demo = function() { //== Demo var initDemos = function() { //== Sweetalert Demo 2 $('.alert_demo_2').click(function(e) { swal(barname, bardescription, { buttons: { confirm: { className : 'btn btn-success' } } }); }); return { //== Init init: function() { initDemos(); } }; }(); //== Class Initialization jQuery(document).ready(function() { SweetAlert2Demo.init(); }); </script>
name, description
Modal will display a list of Boards found in showed selected Folder
Entity Foo (Folder)
Entity Bar (Board)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111 <?php declare(strict_types=1); namespace App\Entity; use App\Repository\FooRepository; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Collection; use Doctrine\ORM\Mapping as ORM; use Symfony\Component\Validator\Constraints as Assert; /** * @ORM\Entity(repositoryClass=FooRepository::class) */ class Foo { /** * @ORM\Id * @ORM\GeneratedValue * @ORM\Column(type="integer") */ private ?int $id = null; /** * @ORM\Column(type="string", length=255) */ #[Assert\NotBlank] private string $name; /** * @ORM\Column(type="text", nullable=true) */ private $description; /** * @var Collection<int, Bar> * @ORM\OneToMany(targetEntity=Bar::class, mappedBy="foo", orphanRemoval=true, cascade={"persist"}) */ // #[Assert\Count(min: 1)] #[Assert\Valid] private Collection $bars; public function __construct() { $this->bars = new ArrayCollection(); } public function __toString() { return $this->name; } public function getId(): ?int { return $this->id; } public function getName(): ?string { return $this->name; } public function setName(string $name): self { $this->name = $name; return $this; } public function getDescription(): ?string { return $this->description; } public function setDescription(?string $description): self { $this->description = $description; return $this; } /** * @return Collection<int, Bar> */ public function getBars(): Collection { return $this->bars; } public function addBar(Bar $bar): self { if (!$this->bars->contains($bar)) { $this->bars->add($bar); $bar->setFoo($this); } return $this; } public function removeBar(Bar $bar): self { if ($this->bars->removeElement($bar)) { if ($bar->getFoo() === $this) { $bar->setFoo(null); } } return $this; } }
DUMP
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131 <?php declare(strict_types=1); namespace App\Entity; use App\Repository\BarRepository; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Collection; use Doctrine\ORM\Mapping as ORM; use Symfony\Component\Validator\Constraints as Assert; /** * @ORM\Entity(repositoryClass=BarRepository::class) */ class Bar { /** * @ORM\Id * @ORM\GeneratedValue * @ORM\Column(type="integer") */ private ?int $id = null; /** * @ORM\Column(type="string", length=255) */ #[Assert\NotBlank] #[Assert\Length(min: 2)] private string $name; /** * @ORM\Column(type="text", nullable=true) */ private $description; /** * @ORM\ManyToOne(targetEntity=Foo::class, inversedBy="bars") * @ORM\JoinColumn(nullable=false, onDelete="CASCADE") */ private ?Foo $foo = null; /** * @var Collection<int, Baz> * @ORM\OneToMany(targetEntity=Baz::class, mappedBy="bar", orphanRemoval=true, cascade={"persist"}) */ // #[Assert\Count(min: 1)] #[Assert\Valid] private Collection $bazs; public function __construct() { $this->bazs = new ArrayCollection(); } public function __toString() { return $this->name; } public function getId(): ?int { return $this->id; } public function getName(): ?string { return $this->name; } public function setName(string $name): self { $this->name = $name; return $this; } public function getFoo(): ?Foo { return $this->foo; } public function setFoo(?Foo $foo): self { $this->foo = $foo; return $this; } public function getDescription(): ?string { return $this->description; } public function setDescription(?string $description): self { $this->description = $description; return $this; } /** * @return Collection<int, Baz> */ public function getBazs(): Collection { return $this->bazs; } public function addBaz(Baz $baz): self { if (!$this->bazs->contains($baz)) { $this->bazs->add($baz); $baz->setBar($this); } return $this; } public function removeBaz(Baz $baz): self { if ($this->bazs->removeElement($baz)) { // set the owning side to null (unless already changed) if ($baz->getBar() === $this) { $baz->setBar(null); } } return $this; } }
Merci de votre aide
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 array:3 [▼ "foo" => App\Entity\Foo {#382 ▼ -id: 96 -name: "Design" -description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostru ▶" -bars: Doctrine\ORM\PersistentCollection {#385 ▼ -snapshot: [] -owner: App\Entity\Foo {#382} -association: array:15 [ 15] -em: Doctrine\ORM\EntityManager {#246 11} -backRefFieldName: "foo" -typeClass: Doctrine\ORM\Mapping\ClassMetadata {#360 } -isDirty: false #collection: Doctrine\Common\Collections\ArrayCollection {#386 ▼ -elements: [] } #initialized: false } } "app" => Symfony\Bridge\Twig\AppVariable {#354 ▶} "menubar" => App\Twig\BarsExtension {#342 ▶}
Partager