Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [SF][SF2]Stylizacja formularzy, One-by-One, Checbox
mimol
post
Post #1





Grupa: Zarejestrowani
Postów: 247
Pomógł: 5
Dołączył: 10.12.2007

Ostrzeżenie: (0%)
-----


Witam, Mam kod
  1. {% for carrier in carriers %}
  2. <tr class="{% if loop.first %}first_item{% endif %} item">
  3. <td class="carrier_action radio"><input name="my_moviesbundle_orderscarriertype[carrier]" value="{{ carrier.id }}" id="my_moviesbundle_orderscarriertype_carrier_{{ carrier.id }}"{% if loop.first %} checked="checked" {% endif %}type="radio"></td>
  4. <td class="carrier_name"><label for="id_carrier2">{{ carrier }}</label></td>
  5. <td class="carrier_infos">{{ carrier.description }}</td>
  6. <td class="carrier_price"><span class="price">{{ carrier.price|price }}</span></td>
  7. </tr>
  8. {% endfor %}


Jak coś takiego mogę osiągnąć używając formularzy z symfony? Potrzebuję jakoś renderować te radio inputy pojedynczo...
Go to the top of the page
+Quote Post
pedro84
post
Post #2





Grupa: Nieautoryzowani
Postów: 2 249
Pomógł: 305
Dołączył: 2.10.2006

Ostrzeżenie: (0%)
-----


Przeczytaj to dokładnie => Rendering each Field by Hand.
Go to the top of the page
+Quote Post
mimol
post
Post #3





Grupa: Zarejestrowani
Postów: 247
Pomógł: 5
Dołączył: 10.12.2007

Ostrzeżenie: (0%)
-----


{% block _my_moviesbundle_orderscarriertype_carrier_2_widget %}
<td class="carrier_action radio">
{{ block('radio_widget') }}
</td>
<td class="carrier_name"><label for="id_carrier2">{{ carriers[1] }}</label></td>
<td class="carrier_infos">{{ carriers[1].description }}</td>
<td class="carrier_price"><span class="price">{{ carriers[1].price|price }}</span></td>
{% endblock %}

Dostaje błąd Variable "carriers" does not exist... Czy idę w dobrym kierunku?
Jeśli udało by mi się uzyskać dostęp do tych zmiennych to było by już gotowe

Ten post edytował mimol 20.02.2013, 18:22:14
Go to the top of the page
+Quote Post
thek
post
Post #4





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Carriers to zmienna przekazana do widoku. Wszystko więc zależy od tego co i jak chcesz tam wepchnąć. Przykładowo ja sobie w pewnych wypadkach rejestruję pewne dodatkowe zmienne podczas tworzenia formularza i wymagam ich poprzez zmienną $options. Jest to dość popularna technika. Zmienną taką potem w twigu mogę dość swobodnie operować. To co Ty robisz to niejako pójście o jeszcze jeden krok dalej... Tyle że moim zdaniem o jeden za daleko (IMG:style_emoticons/default/wink.gif) Owszem możesz iść w stylizację konkretnych pól na zasadzie widocznej tutaj choćby: http://symfony.com/doc/master/cookbook/for...tomization.html , ale może to już być nieco zbyt skomplikowane jeśli nie ogarniasz jeszcze zbytnio symfony2, ponieważ wiele rzeczy w dokumentacji i cookbooku na ten temat nie ma. O tym, że części rzeczy nie dowiesz się bez grzebania w bebechach, nie wspomnę (IMG:style_emoticons/default/smile.gif) Podpowiem tylko jedno... Wspomniany na cookbooku plik https://github.com/symfony/symfony/blob/2.1...ayout.html.twig to naprawdę świetny punkt wyjścia do rozgryzania stylizacji od środka. Ale to już podejście dla osób, które coś w Symfony2 liznęły i jakoś kumają Twiga. Inaczej po prostu to zderzenie z niezrozumałym klocem kodu.
Go to the top of the page
+Quote Post
mimol
post
Post #5





Grupa: Zarejestrowani
Postów: 247
Pomógł: 5
Dołączył: 10.12.2007

Ostrzeżenie: (0%)
-----


@thek
Dzięki, już sobie poradziłem, jednak pojawił się DUŻOOOO większy problem
  1. {% for carrier in carriers %}
  2. <tr class="{% if loop.first %}first_item{% endif %} item">
  3. <td class="carrier_action radio"><input name="{{ OrderForm.carrier.vars.full_name }}"
  4. value="{{ carrier.id }}"
  5. id="{{ OrderForm.carrier.vars.id }}_{{ carrier.id }}"{% if loop.first %}
  6. checked="checked" {% endif %}type="radio"></td>
  7. <td class="carrier_name"><label for="id_carrier2">{{ carrier }}</label></td>
  8. <td class="carrier_infos">{{ carrier.description }}</td>
  9. <td class="carrier_price"><span class="price">{{ carrier.price|price }}</span></td>
  10. </tr>
  11. {% endfor %}

Odnośnie problemu...
  1. public function buildForm(FormBuilderInterface $builder, array $options)
  2. {
  3. $builder
  4. ->add(
  5. 'carrier',
  6. 'entity',
  7. 'class' => 'MyDefaultBundle:Carrier',
  8. 'property' => 'name',
  9. 'multiple' => false,
  10. 'label' => ' '
  11. )
  12. );
  13. }

Jeśli dopiszę extended => true (wtedy jest renderowana jako radio input) to formularz przechodzi walidacje dla NIE POPRAWNEGO carrier_id (takiego, którego nie ma w bazie). Nie wiem, czy tylko ja zaobserwowałem taki przypadek, czy to jest jakaś luka w bezpieczeństwie.
Go to the top of the page
+Quote Post
thek
post
Post #6





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Nie... Problemem jest to, że w encjach połączonych relacjami trzeba dodatkowo wymusić walidację także w encjach zależnych, inaczej domyślnie nie jest ona przeprowadzana. Kiedyś było to przeprowadzane zawsze, ale jak słusznie zauważono, jest to w wielu przypadkach bezsensowne. Przykład? Walidując jakąś operację zakupu, walidujesz także produkt jakiego on dotyczy? Nie (IMG:style_emoticons/default/smile.gif) Potrzebny Ci tylko jego identyfikator. Dlatego zostało to zarzucone i obecnie jeśli chcesz coś zależnego zwalidować, oznaczasz to ustawiając na true opcję cascade_validation podczas definiowania form type LUB w definicji encji przy relacji oznaczamy, iż powinno się używać walidacji. Jak? @Assert/Valid ale nie wiem jak Ty masz całość zbudowaną więc zobacz w sieci oba warianty i wybierz ten dla siebie.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 23:12