• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

[SYMFONY2] Formularz, rozmiar zdjęcia, ogólna walidacja zdjęcia

Object Storage Arubacloud
+1 głos
453 wizyt
pytanie zadane 14 listopada 2015 w PHP przez makoso Mądrala (7,380 p.)
edycja 14 listopada 2015 przez makoso

Tak jak w temacie.
Jak ustawić rozmiar zdjęcia o ile sięnie mylęto dobrze podaję rozmiar 3mb a przy wybraniu zdj o rozmiarze 2mb to krzyczy -.- dodatkowo jakie validacje polecacie do zdjęcia? i ogólne praktyki co do walidacji?

encja

<?php

namespace AppBundle\Entity;
use Symfony\Component\Validator\Constraints as Assert;

class articleform
{
    /**
     * @Assert\NotBlank(message = "author.name.not_blank")
     * * @Assert\Length(
     *      min = 10,
     *      max = 100,
     *      minMessage = "Tytuł musi zawierać minimum 10 znaków",
     *      maxMessage = "Tytuł może zawierać maksymalnie 100 znaków"
     * )
     */
    protected $title;
    /**
     * @Assert\NotBlank(message = "author.name.not_blank")
     * * @Assert\Length(
     *      min = 60,
     *      max = 500,
     *      minMessage = "Opis musi zawierać minimum 60 znaków",
     *      maxMessage = "Opis może zawierać maksymalnie 500 znaków"
     * )
     */
    protected $discrption;
    /**
     * @Assert\NotBlank(message = "author.name.not_blank")
     * * @Assert\Length(
     *      min = 300,
     *      minMessage = "Treść artykułu musi zawierać minimum 300 znaków"
     * )
     */
    protected $text;
    /**
     * @Assert\NotBlank(message = "author.name.not_blank")
     * @Assert\image(
     * maxSize = "25165824",
     * maxSizeMessage = "Wybrany plik jest za duży maksymalny rozmiar zdjęcia to 3Mb",
     * uploadIniSizeErrorMessage = "Wybrany plik jest za duży maksymalny rozmiar zdjęcia to 3Mb",
     * mimeTypesMessage = "Niedozwolony format pliku dowolone formaty to: jpg,JPG,png,PNG",
     * uploadErrorMessage = "Wystąpił problem podczas przesyłania pliku"
     * )
     */
    protected $imgname;

    
    /**
     * setery i getery
     */
}

EDIT PROBLEM ROZWIĄZANY 
php_ini trzymało max size 2M
LECZ I TAK CZEKAM NA JAKIEŚ SUGESTIE MOŻE LEPSZE ROZIĄZANIA itp.

3 odpowiedzi

+1 głos
odpowiedź 15 listopada 2015 przez event15 Szeryf (93,790 p.)
wybrane 15 listopada 2015 przez makoso
 
Najlepsza
Ja bym validował rozszerzenie pliku, typ pliku, nagłówki. Dodatkowo nazwę oryginalną zamieniałbym na własną - losową i zapisywał w katalogu z uprawnieniami tylko do odczytu. Jeżeli są to tylko zdjęcia to możesz kontrolować rozmiar w kontekście pikselów.

W tymże katalogu dodatkowo zadbałbym o nieindeksowanie danego folderu.

Jeżeli chodzi o skrypt, to nazwy klas z tego co kojarzę pisze się wielką literą, no i nie ma czegoś takiego jak "discription", a "imgname" dużo ładniej by wyglądało jako "imageName".

Generalnie dla czytelności kodu, powinno się przerzucić te całe adnotacje do yamli.

 

No i tak jak wcześniej napisali - walidacja to serwisy. Encje nie są od takich rzeczy.

Poza tym bardzo nie podoba mi się ten komentarz "gettery i settery".

Im więcej w kodzie metod typu __get() czy getNazwaPola i __set() i setNazwaPola to tym mniej obiektowy jest ten kod. Łamie się wtedy kilka zasad obiektowego kodu - chociażby po co ustawiać protected skoro i tak masz do wszystkiego publiczne getery i setery? Przecież to zaprzeczanie sobie. Takich metod powinno być jak najmniej a najlepiej to w ogóle nie powinno być ich.

Jeżeli istnieje potrzeba to powinny być prywatne, lub też powinno się stosować metody, które kontekstowo umożliwiają zmianę danych. Na przykład kiedy mamy encję użytkownika to: changeUserData(User $userData) {}

No i możesz za pomocą jakiegoś DTO zmienić tylko odpowiednie dane, które w tym momencie potrzeba.
komentarz 15 listopada 2015 przez Comandeer Guru (600,730 p.)
Nie spotkałem się dotąd poza Symfony z walidacją poza kodem. To raczej praktyka czysto związana z tym frameworkiem.
komentarz 15 listopada 2015 przez makoso Mądrala (7,380 p.)
Aż tak daleko nie wybiegłem chodziło mi właśnie o praktykę w Symfony co jest najlepszym rozwiązaniem?

Poradnik o ile się nie mylę określał yaml za najsłabszy a php za najsilniejszy jednak mało czytelny dlatego wybrałem adnotacje bo są "łatwe"
komentarz 15 listopada 2015 przez efiku Szeryf (75,160 p.)
Zajmij się na razie nauką FW, a to już sobie sam obadasz. ;)
komentarz 15 listopada 2015 przez Comandeer Guru (600,730 p.)
Jeśli mówimy tylko i wyłącznie o Symfony2, to w sumie to nie ma aż tak dużego znaczenia.
komentarz 15 listopada 2015 przez makoso Mądrala (7,380 p.)

Ente pytanie :) już na zakończenie, poboczne lubie wiedzieć na czym stoję :)
Tworzenei takich "struktur" to bardzo źle? jest to kawałek mojego edytora artykułu :)

 

$task = new Articleform();
        $em = $this->getDoctrine()->getManager();
        $article = $this->getDoctrine()
            ->getRepository('AppBundle:Articles')
            ->find($id);
        $galleries = $this->getDoctrine()
            ->getRepository('AppBundle:Gallery')->findAll();
        
        $selectParams = [];
        foreach($galleries AS $gallery){
            $selectParams[$gallery->getId()] = $gallery->getTitle();
        }
        
        $task->setTitle($article->getTitle());
        $task->setDiscrption($article->getDiscrption());
        $task->setText($article->getText());
        
        $form = $this->createFormBuilder($task)
            ->add('title', 'text', array('label' => 'Tytuł artykułu'))
            ->add('discrption', 'textarea', array('label' => 'Skrót/opis artykułu'))
            ->add('text', 'textarea', array('label' => 'Treść artykułu'))
            ->add('imgname', 'file', array('label' => 'Zmień zdjęcie główne artykułu','required' => false))
            ->add('galleryid', 'choice', array(
                                                'choices'   => $selectParams,
                                                'required'  => false,
                                                'label' => 'Dołącz galerię do artykułu',
                                                'choice_attr' => array(
                                                                        $article->getGallery()->getTitle => array('selected' => 'selected'),
                                                ),
            ))
            ->add('save', 'submit', array('label' => 'Zapisz edytowany artykuł'))
            ->getForm();



 

+1 głos
odpowiedź 15 listopada 2015 przez efiku Szeryf (75,160 p.)
Ja bym to mapowanie przeniosl do yamli, niestety nie mam teraz dostepu do lapka to linkow nie wysle, ale poczytaj sobie tez symfony2 best practices. A moze wgl w encjach nie stosowac vaildacji tylko jakis serwis niech tym sie zajmuje. Wolam: @event15 , @SyntaxError .
PS: zmien tag symf2 na symfony2..
komentarz 15 listopada 2015 przez Comandeer Guru (600,730 p.)
Oczywiście, że walidacja powinna zostać przerzucona do serwisu.
komentarz 15 listopada 2015 przez makoso Mądrala (7,380 p.)
Tak jak napisałem wyżej serwisy to jeszcze taka rzecz trochę mi obca, jednak sądzę że szybko przyjdzie na nią czas jak robię "projekt" cały czas mi czegoś potrzeba i szybko udaje się to zrobić prawdopodobnie wiele rzeczy jest źle, nie potrzebnych z czasem będe wiedział jak robić lepiej.

Ps. efik
Kiedyś jak robiłem 1 wersję swojej gry Ty mi podesłałeś kod którego nie rozumiałem teraz wiem że były to encje i komunikacja z bazą przez Doctrine :) i tak jak ostatnio mi skomentowałeś powoli zaczynam lubić ten sposób komunikacji, jednak to nie to samo co PDO, PDO już w głowie full mialem :)
komentarz 15 listopada 2015 przez efiku Szeryf (75,160 p.)
Spoko. Doctrine to abstrakcja na PDO, zerknij sobie kiedyś do kodu.

Mówiąc prosto , PDO obsluguje duzo baz, sqlite mysql itd. ale np sqlite ma inny trochę kod do zapytań :) Dlatego masz Doctrine które samo sobie dostosowuje kod do bazy.

A jeszcze i QueryBuilder ach <3
komentarz 15 listopada 2015 przez makoso Mądrala (7,380 p.)

użyłem go(QueryBuilder) jak narazie cały jeden raz :D niebawem kolejne rozdziewiczenia :D 

+1 głos
odpowiedź 15 listopada 2015 przez SyntaxError Pasjonat (17,170 p.)

Podobne pytania

0 głosów
1 odpowiedź 160 wizyt
pytanie zadane 17 października 2015 w JavaScript przez Paweł123 Nałogowiec (33,500 p.)
+2 głosów
3 odpowiedzi 384 wizyt
pytanie zadane 27 stycznia 2017 w Offtop przez kubekzone Użytkownik (620 p.)
0 głosów
0 odpowiedzi 424 wizyt
pytanie zadane 18 stycznia 2023 w HTML i CSS przez Grzegorz Mikina Dyskutant (8,060 p.)

92,539 zapytań

141,382 odpowiedzi

319,476 komentarzy

61,928 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...