[Symfony] Symfony 4.1 vs Framework3 |
[Symfony] Symfony 4.1 vs Framework3 |
1.08.2018, 10:24:04
Post
#1
|
|
Grupa: Zarejestrowani Postów: 81 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 |
|
|
1.08.2018, 12:11:24
Post
#2
|
|
Grupa: Zarejestrowani Postów: 272 Pomógł: 19 Dołączył: 29.07.2006 Ostrzeżenie: (10%) |
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
----------------------------------- |
|
|
2.08.2018, 08:45:57
Post
#3
|
|
Grupa: Zarejestrowani Postów: 81 Pomógł: 0 Dołączył: 3.08.2017 Ostrzeżenie: (0%) |
* 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? * 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. * ź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. |
|
|
2.08.2018, 18:44:05
Post
#4
|
|
Grupa: Zarejestrowani Postów: 272 Pomógł: 19 Dołączył: 29.07.2006 Ostrzeżenie: (10%) |
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
----------------------------------- |
|
|
3.08.2018, 10:00:38
Post
#5
|
|
Grupa: Zarejestrowani Postów: 175 Pomógł: 26 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? |
|
|
3.08.2018, 12:18:19
Post
#6
|
|
Grupa: Zarejestrowani Postów: 272 Pomógł: 19 Dołączył: 29.07.2006 Ostrzeżenie: (10%) |
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
----------------------------------- |
|
|
3.08.2018, 17:28:49
Post
#7
|
|
Grupa: Zarejestrowani Postów: 175 Pomógł: 26 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. |
|
|
4.08.2018, 13:02:54
Post
#8
|
|
Grupa: Zarejestrowani Postów: 81 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. |
|
|
5.08.2018, 16:52:26
Post
#9
|
|
Grupa: Zarejestrowani Postów: 616 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 |
|
|
7.08.2018, 17:45:56
Post
#10
|
|
Grupa: Zarejestrowani Postów: 81 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 poczytaj o: [...] Dzięki za wskazówki. Poczytam, zanim się wezmę za dalsze programowanie. grube controllery Próbowałem, ale zbytnio nie wiem, jak je uprościć. PS Kontynuuję temat. - 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/ - 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. - nazewnictwo IsUserUser Faktycznie. Chyba powinienem nazwać to w stylu isUserId() czy jakoś tak. - warto poczytać o szablonie twig Używam szablonów twig w Symfony, ale jeszcze doczytam. http://symfony2-docs-pl.readthedocs.io/pl/...templating.html grube controllery Jak je uprościć? Nie mam pojęcia... PS Kontrolery wyglądały skromniej, gdy jeszcze nie przestrzegałem zasady długości maks 80 znaków w linii... |
|
|
9.08.2018, 07:59:10
Post
#11
|
|
Grupa: Zarejestrowani Postów: 42 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
|
|
|
9.08.2018, 20:48:14
Post
#12
|
|
Grupa: Zarejestrowani Postów: 2 592 Pomógł: 445 Dołączył: 12.03.2007 Ostrzeżenie: (0%) |
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ł. -------------------- |
|
|
9.08.2018, 21:23:23
Post
#13
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 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)
|
|
|
19.08.2018, 12:25:50
Post
#14
|
|
Grupa: Zarejestrowani Postów: 81 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... 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 |
|
|
21.08.2018, 07:04:35
Post
#15
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
Middleware twoim kluczem jest.
|
|
|
21.08.2018, 16:48:36
Post
#16
|
|
Grupa: Zarejestrowani Postów: 81 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 |
|
|
22.08.2018, 11:30:24
Post
#17
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 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
|
|
|
7.09.2018, 06:18:56
Post
#18
|
|
Grupa: Zarejestrowani Postów: 81 Pomógł: 0 Dołączył: 3.08.2017 Ostrzeżenie: (0%) |
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 |
|
|
Wersja Lo-Fi | Aktualny czas: 23.04.2024 - 22:22 |