Bonjour,

Je développe actuellement un site et je souhaite avoir une interface permettant l'édition si l'on est authentifié.

Pour expliquer le contexte, mon layout dispose d'une colonne à droite contenant un petit texte qui pourra être modifiable en WYSIWYG si l'on dispose des droits (sera rajouté ultérieurement). Pour cela mon composant doit afficher en fonction d'un paramètre (définit en base de donnée, mais considérons pour l'instant qu'il s'agisse d'une constante) l'action show et permettre l'édition (edit et update).

Afin de réaliser la chose de manière progressive, j'ai rajouté le code suivant :

Mon layout.php
Code : Sélectionner tout - Visualiser dans une fenêtre à part
<?php include_component('pagecontent','showtest'); ?>
Mon components.class.php
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
 
class pagecontentComponents extends sfComponents
{
[...]
  public function executeShowtest(sfWebRequest $request)
  {
    $q = Doctrine_Query::create()
      ->from('sfContent s')
      ->where('s.slugname = ?', 'test');
 
    $this->sf_content = $q->fetchOne();
  } 
 
  public function executeEdittest(sfWebRequest $request)
  {
    $q = Doctrine_Query::create()
      ->from('sfContent s')
      ->where('s.slugname = ?', 'test');
 
    $this->sf_content = $q->fetchOne();
    $this->form = new sfContentForm($sf_content);    
  }
 
  public function executeUpdatetest(sfWebRequest $request)
  {
    $q = Doctrine_Query::create()
      ->from('sfContent s')
      ->where('s.slugname = ?', 'test');
 
    $this->sf_content = $q->fetchOne();
    $this->form = new sfContentForm($sf_content);
 
    $this->processForm($request, $this->form);
 
    $this->setTemplate('_edittest');    
  }
 
  protected function processForm(sfWebRequest $request, sfForm $form)
  {
    $form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName()));
    if ($form->isValid())
    {
      $sf_content = $form->save();
 
      $this->redirect('pagecontent_view',$sf_content);
    }
  }
}
et mon template _showtest
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
<h2><?php echo $sf_content->getPagename() ?></h2><a href="<?php echo url_for('pagecontent_edit',$sf_content) ?>">Edit</a>
 
<?php echo $sf_content->getBody(ESC_RAW) ?>

Jusqu'ici tout va à peu près bien en lecture...
Mon composant s'affiche correctement où il faut, cependant :

- je ne peux pas éditer son contenu sans perdre la visualisation des modules de la page (grosso modo, j'obtiens mon composant en édition comme s'il était un module en plus de sa place habituelle en lecture). J'imagine qu'il s'agit d'une erreur de ma part dans url_for du template _showtest. Que dois-je mettre afin de lancer l'action executeEdittest du composant sans perdre pour autant le contenu du module en lecture ?

- j'aimerais que la chaine 'test' soit fourni en paramètre à l'action executeShowtest (bref la transformer en executeShow avec 'test' fournis en paramètre via $request)

Pour le premier point, j'ai tenté d'adapter ce qui est indiqué à l'adresse suivante mais sans résultat...
http://www.blogafab.com/symfony-gere...-un-composant/

Je suis preneur de toutes explication ou toute piste. Merci d'avance

[EDIT]
Après consultation de plusieurs topic, je m'interroge également sur la pertinence de mon schema.yml je suis preneur de tout conseil (je débute et j'ai du mal ^^)
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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
SfContent:
  connection: doctrine
  tableName: sfContent
  actAs:
    Timestampable: ~
    Sluggable:
      fields: [pagename]
      name: slugname
      unique: true
      canUpdate: true
  columns:
    id:
      type: integer(4)
      fixed: false
      unsigned: false
      primary: true
      autoincrement: true
    pagename:
      type: string(50)
      fixed: false
      unsigned: false
      primary: false
      notnull: true
      autoincrement: false
    istitle:
      type: boolean
      fixed: false
      unsigned: false
      primary: false
      notnull: true
      autoincrement: false
    body:
      type: string(10000)
      fixed: false
      unsigned: false
      primary: false
      notnull: true
      autoincrement: false
SfDownload:
  connection: doctrine
  tableName: sfDownload
  actAs:
    Timestampable: ~
    Sluggable:
      fields: [label, version]
      name: slugname
      unique: true
      canUpdate: true
  columns:
    id:
      type: integer(4)
      fixed: false
      unsigned: false
      primary: true
      autoincrement: true
    label:
      type: string(45)
      fixed: false
      unsigned: false
      primary: false
      notnull: true
      autoincrement: false
    sfdownloadtype_id:
      type: integer(4)
      fixed: false
      unsigned: false
      primary: false
      notnull: true
      autoincrement: false
    compatible:
      type: string(45)
      fixed: false
      unsigned: false
      primary: false
      notnull: false
      autoincrement: false
    version:
      type: string(15)
      fixed: false
      unsigned: false
      primary: false
      notnull: false
      autoincrement: false
    url:
      type: string(200)
      fixed: false
      unsigned: false
      primary: false
      notnull: true
      autoincrement: false
    changelog:
      type: string(3000)
      fixed: false
      unsigned: false
      primary: false
      notnull: false
      autoincrement: false
    sfproduct_id:
      type: integer(4)
      fixed: false
      unsigned: false
      primary: false
      notnull: true
      autoincrement: false
  relations:
    SfDownloadType:
      local: sfdownloadtype_id
      foreign: id
      type: one
    SfProduct:
      local: sfproduct_id
      foreign: id
      type: one
SfDownloadType:
  connection: doctrine
  tableName: sfDownloadType
  actAs:
    Sluggable:
      fields: [label]
      name: slugname
      unique: true
      canUpdate: true
  columns:
    id:
      type: integer(4)
      fixed: false
      unsigned: false
      primary: true
      autoincrement: true
    label:
      type: string(45)
      fixed: false
      unsigned: false
      primary: false
      notnull: true
      autoincrement: false
    picture:
      type: string(200)
      fixed: false
      unsigned: false
      primary: false
      notnull: true
      autoincrement: false
    backcolor:
      type: string(10)
      fixed: false
      unsigned: false
      primary: false
      notnull: false
      autoincrement: false
  relations:
    SfDownload:
      local: id
      foreign: sfdownloadtype_id
      type: many
SfLicence:
  connection: doctrine
  tableName: sfLicence
  actAs:
    Timestampable: ~
    Sluggable:
      fields: [name]
      name: slugname
      unique: true
      canUpdate: true
  columns:
    id:
      type: integer(4)
      fixed: false
      unsigned: false
      primary: true
      autoincrement: false
    name:
      type: string(100)
      fixed: false
      unsigned: false
      primary: false
      notnull: true
      autoincrement: false
    content:
      type: string(10000)
      fixed: false
      unsigned: false
      primary: false
      notnull: true
      autoincrement: false
    url:
      type: string(200)
      fixed: false
      unsigned: false
      primary: false
      notnull: true
      autoincrement: false
    picture:
      type: string(200)
      fixed: false
      unsigned: false
      primary: false
      notnull: true
      autoincrement: false
  relations:
    SfProduct:
      local: id
      foreign: licence_id
      type: many
SfPartner:
  connection: doctrine
  tableName: sfPartner
  actAs: { Timestampable: ~ }
  columns:
    id:
      type: integer(4)
      fixed: false
      unsigned: false
      primary: true
      autoincrement: true
    name:
      type: string(50)
      fixed: false
      unsigned: false
      primary: false
      notnull: true
      autoincrement: false
    url:
      type: string(200)
      fixed: false
      unsigned: false
      primary: false
      notnull: false
      autoincrement: false
    logo:
      type: string(200)
      fixed: false
      unsigned: false
      primary: false
      notnull: true
      autoincrement: false
    description:
      type: string(100)
      fixed: false
      unsigned: false
      primary: false
      notnull: false
      autoincrement: false
SfProduct:
  connection: doctrine
  tableName: sfProduct
  actAs:
    Timestampable: ~
    Sluggable:
      fields: [name]
      name: slugname
      unique: true
      canUpdate: true
  columns:
    id:
      type: integer(4)
      fixed: false
      unsigned: false
      primary: true
      autoincrement: true
    name:
      type: string(45)
      fixed: false
      unsigned: false
      primary: false
      notnull: true
      autoincrement: false
    is_downloadable:
      type: integer(1)
      fixed: false
      unsigned: false
      primary: false
      notnull: true
      autoincrement: false
    short_desc:
      type: string(100)
      fixed: false
      unsigned: false
      primary: false
      notnull: true
      autoincrement: false
    long_desc:
      type: string(3000)
      fixed: false
      unsigned: false
      primary: false
      notnull: true
      autoincrement: false
    features:
      type: string(1000)
      fixed: false
      unsigned: false
      primary: false
      notnull: true
      autoincrement: false
    last_version:
      type: string(15)
      fixed: false
      unsigned: false
      primary: false
      notnull: false
      autoincrement: false
    licence_id:
      type: integer(4)
      fixed: false
      unsigned: false
      primary: false
      notnull: false
      autoincrement: false
    copyrights:
      type: string(45)
      fixed: false
      unsigned: false
      primary: false
      notnull: true
      autoincrement: false
    screenshot:
      type: string(200)
      fixed: false
      unsigned: false
      primary: false
      notnull: true
      autoincrement: false
  relations:
    SfLicence:
      local: licence_id
      foreign: id
      type: one
    SfDownload:
      local: id
      foreign: sfproduct_id
      type: many