Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Symfony] Symfony 4.1 vs Framework3
eerie
post 1.08.2018, 10:24:04
Post #1





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 3.08.2017

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


Witam

Napisałem prostą aplikację we framework'u Symfony 4.1. Chciałbym poddać ją Waszej ocenie. Czy może być tak napisana i co ewentualnie powinienem poprawić. Link do repozytorium jest tutaj:

https://github.com/webeeq/sieciq.eeq

I biblioteka do obsługi REST API:

https://github.com/webeeq/sieciq

Potem napisałem własny szkielet aplikacji w PHP 7.2. Wzorowałem go na framework'u Symfony. Starałem się, aby był możliwie najprościej napisany, by działał możliwie najszybciej. Link do SVN:

https://github.com/webeeq/framework3.eeq

Zastanawia mnie jedno. Symfony strasznie długo się prekompiluje (5-20 s). Potem działa dość szybko, ale moja aplikacja jest wiele razy wydajniejsza. Czy nie dyskredytuje to Symfony do używania przy projektach dla dużej rzeszy użytkowników? Czy nie lepiej jest wtedy napisać coś po swojemu?

Pozdrawiam
Robert
Go to the top of the page
+Quote Post
kallosz
post 1.08.2018, 12:11:24
Post #2





Grupa: Zarejestrowani
Postów: 272
Pomógł: 19
Dołączył: 29.07.2006

Ostrzeżenie: (10%)
X----


tak na szybko
* za dużo logiki w kontrolerach. Tam powinno znajdować się jak najmniej.
* komunikaty wiadomości email do wysłania w kontrolerach. Przenieś to do szablonu i tam ładnie formatuj przed wysłaniem.
* źle zaprojektowane encje


Cytat
Czy nie dyskredytuje to Symfony do używania przy projektach dla dużej rzeszy użytkowników?


IMO nie, dzięki temu że dużo rzeczy leci do cache nie ma potrzeby podobnego ich generowania.


--------------------
Pomogłem ?? Kliknij pomógł :) || kallosz.pl
-----------------------------------
Go to the top of the page
+Quote Post
eerie
post 2.08.2018, 08:45:57
Post #3





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 3.08.2017

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


Cytat(kallosz @ 1.08.2018, 13:11:24 ) *
* za dużo logiki w kontrolerach. Tam powinno znajdować się jak najmniej.

Logiki jest tyle, ile było niezbędne, aby wiadomości wyświetlały się nad formularzami. Da się obsłużyć błędy w klasach formularzy i potem tylko wyświetlić nad danym polem formularza lub całym formularzem. Jak wszystko jest ok i nie ma błędów, to wyświetlić stosowną podstronę z informacją. Tak byłoby prościej. Tylko w pierwowzorze strony miałem taki zamysł, aby wyświetlać komunikaty tylko nad formularzem. Że coś jest ok czy też źle i podświetlać odpowiednim kolorem. Dlatego akurat w tej aplikacji sprawdzam podstawowe błędy w klasie formularza i potem je zwracam w kontrolerze do zmiennej z komunikatami. Potem dodaję kolejne, jak wybrana została jakaś akcja i np. udało się coś zapisać do bazy lub nie. Gdy udało się wysłać email lub nie. Potem obudowuję to w html i wyświetlam nad formularzem na stronie.

Czyli jak postępować w przyszłości? Tak skonstruować klasy formularzy, aby obsłużyć w nich wszystkie informacje o błędach, gdy spełnione są odpowiednie warunki? Jak nie ma błędów, to tylko wykonać zapis do bazy danych i przekierować na stosowną podstronę z komunikatem?

Cytat(kallosz @ 1.08.2018, 13:11:24 ) *
* komunikaty wiadomości email do wysłania w kontrolerach. Przenieś to do szablonu i tam ładnie formatuj przed wysłaniem.

Czyli w zależności od akcji tylko wysłać email'em stosowną podstronę html z komunikatem? Teraz jest tak, że wszystkie komunikaty obsługuje jeden szablon. Przekazywane są do niego tylko dane o nadawcy, odbiorcy, temat, wiadomość... Faktycznie. Można to zrobić prościej.

Cytat(kallosz @ 1.08.2018, 13:11:24 ) *
* źle zaprojektowane encje

Tu nie rozumiem... Generuje się z nich baza MySQL, jak chciałem. Tabele są odpowiednio powiązane. Gety i sety wygenerowały się automatycznie. Na to nie mam wpływu.

OK. Zrobię nową wersję strony z odchudzonymi kontrolerami i pokarzę do oceny.
Go to the top of the page
+Quote Post
kallosz
post 2.08.2018, 18:44:05
Post #4





Grupa: Zarejestrowani
Postów: 272
Pomógł: 19
Dołączył: 29.07.2006

Ostrzeżenie: (10%)
X----


Cytat
Tu nie rozumiem... Generuje się z nich baza MySQL, jak chciałem.

No i to jest błąd. Myślisz podejściem Database first. Nawet doctrine zaleca Model first. https://www.youtube.com/watch?v=rzGeNYC3oz0


--------------------
Pomogłem ?? Kliknij pomógł :) || kallosz.pl
-----------------------------------
Go to the top of the page
+Quote Post
sabat24
post 3.08.2018, 10:00:38
Post #5





Grupa: Zarejestrowani
Postów: 166
Pomógł: 25
Dołączył: 13.09.2007
Skąd: Gdańsk

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


Cytat
No i to jest błąd.

Uważasz to za błąd w ogóle, czy w tym konkretnym przypadku?
Go to the top of the page
+Quote Post
kallosz
post 3.08.2018, 12:18:19
Post #6





Grupa: Zarejestrowani
Postów: 272
Pomógł: 19
Dołączył: 29.07.2006

Ostrzeżenie: (10%)
X----


Błąd niezależnie od przypadku. Myślenie o tym że encja model ma nam odzwierciedlać bazę jest złym podejściem. Model powinien odzwierciedlać nasze cele biznesowe a nie służyć do generowania bazy.


--------------------
Pomogłem ?? Kliknij pomógł :) || kallosz.pl
-----------------------------------
Go to the top of the page
+Quote Post
sabat24
post 3.08.2018, 17:28:49
Post #7





Grupa: Zarejestrowani
Postów: 166
Pomógł: 25
Dołączył: 13.09.2007
Skąd: Gdańsk

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


Chodzi mi raczej o to, że myślenie podejściem Data First nie jest uznawane za błąd sam w sobie, a Model First nie zawsze musi być stosowane w pierwszej kolejności. Wszystko zależy czego potrzeba i co się chce osiągnąć.
Zgadzam się, że przy modelu nie masz odwzorować schematu bazy, jaki masz założony, bo nie masz mieć takiego założenia po prostu. Natomiast jeśli idziesz od strony architektury bazy danych, bo masz ku temu powód, to nic w tym złego.
Go to the top of the page
+Quote Post
eerie
post 4.08.2018, 13:02:54
Post #8





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 3.08.2017

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


Ja zastosowałem podejście "Code First". Jest najbardziej lubiane przez programistów. Najpierw stworzyłem klasy encji w php na podstawie modelu, jaki rozrysowałem wcześniej na kartce. Pamiętałem o tym, aby zastosować „czwartą postać normalną”. Potem na podstawie kodu php wygenerowałem automatycznie bazę danych. Następnie wygenerowałem get'y i set'y.

Podejście "DB First" jest mniej wskazane. Stosuje się je, gdy zaczyna się pisanie aplikacji od gotowej bazy danych.

"Model First" jest prosty i wskazany dla początkujących programistów. Można na nim oprzeć raczej niewielką aplikację, gdy dysponujemy mało doświadczonym zespołem.
Go to the top of the page
+Quote Post
memory
post 5.08.2018, 16:52:26
Post #9





Grupa: Zarejestrowani
Postów: 615
Pomógł: 84
Dołączył: 29.11.2006
Skąd: bełchatów

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


poczytaj o:
- dependency injection
- o autoryzacji w symfony i ogólnie. CookieLogin brak soli, login i hasło plaintextem, tak samo przy aktualizacji danych.
- nazewnictwo IsUserUser
- warto poczytać o szablonie twig

grube controllery

Go to the top of the page
+Quote Post
eerie
post 7.08.2018, 17:45:56
Post #10





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 3.08.2017

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


Poprawiłem obsługę błędów formularzy, żeby było, jak pokazują w dokumentacji. Będę wdzięczny za wytknięcie wszelkich niedociągnięć. Tylko tak mogę podnieść kwalifikację. Najnowsza wersja aplikacji w Symfony 4.1.1 poniżej:

https://github.com/webeeq/sieciq2.eeq

Pozdrawiam
Robert

Cytat(memory @ 5.08.2018, 17:52:26 ) *
poczytaj o:
[...]

Dzięki za wskazówki. Poczytam, zanim się wezmę za dalsze programowanie.

Cytat(memory @ 5.08.2018, 17:52:26 ) *
grube controllery

Próbowałem, ale zbytnio nie wiem, jak je uprościć.


PS Kontynuuję temat.

Cytat(memory @ 5.08.2018, 17:52:26 ) *
- dependency injection

Znalazłem krótki i prosty artykuł na ten temat. Warto doczytać coś więcej?

https://lukasz-socha.pl/php/wzorce-projekto...ency-injection/

Cytat(memory @ 5.08.2018, 17:52:26 ) *
- o autoryzacji w symfony i ogólnie. CookieLogin brak soli, login i hasło plaintextem, tak samo przy aktualizacji danych.

Login jest czystym tekstem, ale hasło jest kodowane md5(). Zapis przy logowaniu również (kodowane hasło).

Możesz polecić jakiś dobry artykuł? W Google jest dużo nie do końca "przekonywujących" tekstów na ten temat. smile.gif

Cytat(memory @ 5.08.2018, 17:52:26 ) *
- nazewnictwo IsUserUser

Faktycznie. Chyba powinienem nazwać to w stylu isUserId() czy jakoś tak.

Cytat(memory @ 5.08.2018, 17:52:26 ) *
- warto poczytać o szablonie twig

Używam szablonów twig w Symfony, ale jeszcze doczytam.

http://symfony2-docs-pl.readthedocs.io/pl/...templating.html

Cytat(memory @ 5.08.2018, 17:52:26 ) *
grube controllery

Jak je uprościć? Nie mam pojęcia... wink.gif


PS Kontrolery wyglądały skromniej, gdy jeszcze nie przestrzegałem zasady długości maks 80 znaków w linii...
Go to the top of the page
+Quote Post
robert0770
post 9.08.2018, 07:59:10
Post #11





Grupa: Zarejestrowani
Postów: 38
Pomógł: 1
Dołączył: 18.02.2015

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


jak poczytasz o dependency injection to będziesz wiedział jak je uprościć, symfony service -> tego szukaj w google
Go to the top of the page
+Quote Post
vokiel
post 9.08.2018, 20:48:14
Post #12





Grupa: Zarejestrowani
Postów: 2 408
Pomógł: 408
Dołączył: 12.03.2007

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


Cytat(eerie @ 7.08.2018, 18:45:56 ) *
Login jest czystym tekstem, ale hasło jest kodowane md5(). Zapis przy logowaniu również (kodowane hasło).


MD5 jest od dłuższego czasu nie jest uważane za bezpieczne. To jest prosta funkcja skrótu, którą łatwo złamać (chociażby przy pomocy łatwo dostępnych tablic tęczowych). Nie jest to plaintext, ale jednak niewiele lepiej.

Poczytaj o bcrypt, który teraz jest standardem w przechowywaniu haseł.


--------------------
Go to the top of the page
+Quote Post
Pyton_000
post 9.08.2018, 21:23:23
Post #13





Grupa: Zarejestrowani
Postów: 7 564
Pomógł: 1330
Dołączył: 26.10.2005

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


w php jest to password_hash i w przypadku PHP7 argon2 jako metoda hashująca (obecnie chyba najbezpieczniejsza dla php)
Go to the top of the page
+Quote Post
eerie
post 19.08.2018, 12:25:50
Post #14





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 3.08.2017

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


Cytat
jak poczytasz o dependency injection to będziesz wiedział jak je uprościć, symfony service -> tego szukaj w google

Dzięki. Poczytam... Na chwilę obecną dodałem klasy do obsługi wiadomości i błędów. Pozwoliło mi to na walidację danych z formularzy poza kontrolerem. Tak to wygląda teraz:

https://github.com/webeeq/framework4.eeq - Prosty szkielet aplikacji od podstaw
https://github.com/webeeq/sieciq2.eeq - Aplikacja powyżej w Symfony 4.1
https://github.com/webeeq/sieciq - Biblioteka do REST API aplikacji w Symfony (powyżej)

Pomyślę, co uprościć jeszcze. Może jakieś propozycje?

Cytat
Poczytaj o bcrypt, który teraz jest standardem w przechowywaniu haseł.

Cytat
w php jest to password_hash i w przypadku PHP7 argon2 jako metoda hashująca (obecnie chyba najbezpieczniejsza dla php)

Dzięki za wskazówki... Jeśli chodzi o Symfony, znalazłem takie artykuły o systemach logowania:

http://zkodemprzezswiat.pl/phpsymfony-pros...ania-logowanie/
https://iwona.giat.pl/2017/03/27/autoryzacja-uzytkownikow/

Cytat
$password = $this->get('security.password_encoder')
->encodePassword($user, 'haslo');


Nie wiem, na ile to bezpieczne. Ale widzę, że Symfony też ma własne rozwiązanie... smile.gif

Pozdrawiam
Robert

Mam taki kod na początku każdego kontrolera:

Kod
$config = new Config();
$session = $request->getSession();
$em = $this->getDoctrine()->getManager();
$cookieLogin = new CookieLogin($em, $config);
$cookieLogin->setCookieLogin($session);


Pozawala mi to sprawdzić w sesji, czy jest zalogowany użytkownik. Jeśli nie jest, to loguje go na podstawie ciasteczka, jeśli takie zostało utworzone przy logowaniu.

Moje pytanie. Czy da się utworzyć usługę, która automatycznie wykona mi ten kod bez konieczności umieszczania go i wywoływania w każdym kontrolerze z osobna?

Pozdrawiam
Robert

Ten post edytował eerie 10.08.2018, 12:50:15
Go to the top of the page
+Quote Post
Pyton_000
post 21.08.2018, 07:04:35
Post #15





Grupa: Zarejestrowani
Postów: 7 564
Pomógł: 1330
Dołączył: 26.10.2005

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


Middleware twoim kluczem jest.
Go to the top of the page
+Quote Post
eerie
post 21.08.2018, 16:48:36
Post #16





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 3.08.2017

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


Rozwiązałem to inaczej:

http://symfony.com/doc/current/reference/events.html
https://symfony.com/doc/2.3/cookbook/event_...er_filters.html

Pozdrawiam
Robert
Go to the top of the page
+Quote Post
Pyton_000
post 22.08.2018, 11:30:24
Post #17





Grupa: Zarejestrowani
Postów: 7 564
Pomógł: 1330
Dołączył: 26.10.2005

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


Autoryzacja w evencie? Słaba opcja. Jako Middleware możesz sobie dowolnie sterować np. czy ma to działać tylko na panel admina a może tylko gdzieś coś. Dla mnie zdarzenie które chcesz wywołać nie jest eventem
Go to the top of the page
+Quote Post
eerie
post 7.09.2018, 06:18:56
Post #18





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 3.08.2017

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


Cytat(Pyton_000 @ 22.08.2018, 12:30:24 ) *
Dla mnie zdarzenie które chcesz wywołać nie jest eventem

Może się mylę... Moje zdarzenie nie jest eventem, ale jest wykonywane, gdy zdarza się event. Chodzi o to, aby przed wywołaniem jakiegokolwiek kontrolera (event: onKernelController) najpierw spróbowało mnie zalogować. Odpalenie mojego kontrolera z logowaniem poprzedza wykonanie jakiegokolwiek innego kontrolera sterującego treścią strony... Podobnie można obsłużyć jakieś menu, które ma się wyświetlić na każdej podstronie. W Google są na to nawet gotowe przykłady.

Pozdrawiam
Robert

Wprowadziłem usługi, aby odchudzić kontrolery. Prosiłbym o uwagi, co jeszcze kwalifikuje się do poprawy...

https://github.com/webeeq/sieciq2.eeq

Pozdrawiam
Robert

Ten post edytował eerie 7.09.2018, 06:20:19
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 Wersja Lo-Fi Aktualny czas: 21.11.2018 - 15:38