New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dlaczego laravel jest do rzyci #10

Open
wants to merge 8 commits into
base: gh-pages
from

Conversation

Projects
None yet
6 participants
@iwankgb

iwankgb commented Jun 9, 2015

Zgodnie z prośbą, którą Leszek złożył na fejsie: oto i pull request do PHPersowego FAQ tłumaczący dlaczego Laravel to zło.

@adampiotrowski

This comment has been minimized.

adampiotrowski commented Jun 9, 2015

👍

index.html Outdated
</ol>
<p>
Dlaczego w takim razie ktoś w ogóle używa Laravela? Z bardzo prostej przyczyny - Otwell zapewnia projektowi fenomenalny wręcz marketing, próg wejścia jest w zasadzie zerowy (najwyżej opakujesz kod proceduralny w statyczne metody), a do tego czas nas czasem goni... Co zrobić? Jak żyć? Nie używać Laravela do żadnych projektów, które potem będą musiały być przez dłuższy czas utrzymywane. Twoim celem jest zwiększenie sprzedaży piwa marki X w wakacje, wśród studentów? Zastanów się nad tym, czy nie byłoby warto użyć <a href="http://silex.sensiolabs.org/">Silexa</a> albo <a href="http://www.slimframework.com/">Slima</a>, a jeśli nie chcesz bądź po prostu musisz - to piszże w Laravelu.<br>
Nigdy, przenigdy, nie używaj Laravela do projektów, które będą miały być utrzymywane przez wiele lat. Słaba architektura Cię wykończy zanim zdąży Cię wykończyć brak dobrych testów jednostkowych.

This comment has been minimized.

@norzechowicz

norzechowicz Jun 9, 2015

Member

Nie jestem przekonany do takich stwierdzeń. To mimo wszystko jest subiektywna opinia.

This comment has been minimized.

@iwankgb

iwankgb Jun 9, 2015

Oczywiście, moja własna. Oparta na doświadczeniu w pracy (krótkiej, bo krótkiej) z Laravelem.

This comment has been minimized.

@norzechowicz

norzechowicz Jun 9, 2015

Member

No właśnie, tylko że FAQ PHPers to raczej nie są doświadczenia i wnioski jednej osoby a raczej całego community. Poza tym ja się z tym stwierdzeniem nie zgadzam, framework to detal a detale nie mogą wyłożyć całego projektu.

This comment has been minimized.

@iwankgb

iwankgb Jun 9, 2015

Zapraszam serdecznie do przedstawienia wniosków innych członków społeczności. Na tyle konkretnych, że da się je ubrać w formę PR.
Z resztą Twojej wypowiedzi się nie zgadzam.

This comment has been minimized.

@kallosz

kallosz Jun 10, 2015

wydaje mi się jednak że te detale jak najbardziej mogą być odpowiedzialne za wyłożenie aplikacji.

This comment has been minimized.

@norzechowicz

norzechowicz Jun 10, 2015

Member

To czy mogą czy nie mogą jest dyskusja na osobny wątek.
Jako społeczność nie powinniśmy przyjmować żadnego stanowiska a zamiast tego obiektywnie pokazać wady (których jest więcej) i zalety (których praktycznie nie ma).
Załóżmy, że ten PR zostanie zmergowany w formie bez personalnych wniosków. Dzięki temu damy możliwość zrobienia PR'a z zaletami korzystania z tego "frameworka", dajmy ludziom wybór na podstawie rzetelnych informacji zamiast narzucać im własne zdanie.

This comment has been minimized.

@iwankgb

iwankgb Jun 10, 2015

@norzechowicz - co jest osobistym wnioskiem wg Twoich kryteriów? Jeśli to co piszę opieram o własne doświadczenie, to w zasadzie wszystkie te wnioski są mniej lub bardziej osobiste.

This comment has been minimized.

@norzechowicz

norzechowicz Jun 10, 2015

Member

Słaba architektura Cię wykończy zanim zdąży Cię wykończyć brak dobrych testów jednostkowych.

To jest osobisty wniosek w dodatku niesłuszny.

index.html Outdated
<ul id="frameworki" class="cd-faq-group">
<li class="cd-faq-title"><h2>Frameworki</h2></li>
<li>
<a class="cd-faq-trigger" href="#0">Dlaczego hejtujemy Laravela?</a>

This comment has been minimized.

@norzechowicz

norzechowicz Jun 9, 2015

Member

W zasadzie to nie hejtujemy bo nie można nazwać hejtem powiedzenia, że białe jest białe a czarne jest czarne.

This comment has been minimized.

@iwankgb

iwankgb Jun 9, 2015

Wpis na temat Laravela ma charakter popularyzatorski i utrzymany jest w lekkim tonie ;)

This comment has been minimized.

@norzechowicz

norzechowicz Jun 9, 2015

Member

Wpis na temat Laravela powinien jednak dostosować się do pozostałych wpisów.

This comment has been minimized.

@iwankgb

iwankgb Jun 9, 2015

Być może znaczy to tyle, że wpis ten w takiej formie nie nadaje się do tego FAQ.

This comment has been minimized.

@iwankgb

iwankgb Jun 9, 2015

Dobra - ponieważ ten wpis ma zasadniczo inny charakter, to proszę o jakieś bardziej szczegółowe informacje czego oczekujecie. Od koncepcji listy nie odejdę, bo pozwala ona krótko i zwięźle przedstawić zarzuty/wady/zalety.
Ma być na bardo poważnie i w stylu manuala?

This comment has been minimized.

@iwankgb

iwankgb Jun 9, 2015

@efik - wydaje mi się, że lepiej odsyłać do fejsa w "przypisach" niż po prostu wrzucać linki tamże. Głównie dlatego, że tam znajdzie się zawsze (albo prawie zawsze) jakiś flejm, a zaproponowana przeze mnie forma wskazuje na słabości i ewentualnie odsyła do dyskusji na ich temat.

This comment has been minimized.

@norzechowicz

norzechowicz Jun 10, 2015

Member

Też nie jestem przekonany do wrzucania linków do grupy na fejsie, lepiej wyciągnąć najlepsze kawałki, zapytać autorów o zdanie i zmontować z tego wpis do FAQ.

This comment has been minimized.

@leafnode

leafnode Jun 10, 2015

Contributor

Problem z linkowaniem do fejsa jest taki, że dyskusje na fejsie mogą zniknąć dosyć łatwo i szybko.

index.html Outdated
<a class="cd-faq-trigger" href="#0">Dlaczego hejtujemy Laravela?</a>
<div class="cd-faq-content">
<p>
Ja, piszący te słowa, pracowałem przez dwa miesiące z Laravelem i mója do niego niechęć nie opiera się na zawiści wobec Taylora Otwella.

This comment has been minimized.

@norzechowicz

norzechowicz Jun 9, 2015

Member

To w sumie nie jest istotne.

This comment has been minimized.

@iwankgb

iwankgb Jun 9, 2015

IMHO jest - fakt, że pracowałem z Laravelem pozwala mi oceniać jego słabości od środka, a nie tylko przez pryzmat chujowej architektury.

This comment has been minimized.

@norzechowicz

norzechowicz Jun 9, 2015

Member

Tylko, że FAQ PHPers to nie "prywatne odczucia Maćka" a raczej źródło informacji, bez sprecyzowanego autora.

index.html Outdated
Nigdy, przenigdy, nie używaj Laravela do projektów, które będą miały być utrzymywane przez wiele lat. Słaba architektura Cię wykończy zanim zdąży Cię wykończyć brak dobrych testów jednostkowych.
</p>
<p>
Na koniec niestety przypomniałem sobie, że <a href="https://github.com/laravel/framework/pull/4824">korzystanie z DI</a> też potrafi skrócić życie. Bardzo długo szukałem w kodzie PHPowym zmiennej $driver przekazywanej do konstruktora, a ona sobie spokojnie żyła <a href="https://devel-m6w6.rhcloud.com/mdref/http/Client/__construct">w C</a>.

This comment has been minimized.

@norzechowicz

norzechowicz Jun 9, 2015

Member

W sumie zmieniłbym formę wypowiedzi, zamiast pisać to jako rozmowę z czytającym IMO bardziej merytocznie byłoby po prostu zrobić listę ułomność Laravela.

This comment has been minimized.

@iwankgb

iwankgb Jun 9, 2015

Tam jest dość konkretna lista ułomności. Forma ma jeden cel - ułatwić użytkownikowi zrozumienie mojego przekazu i uważam, że ją to usprawiedliwia.

This comment has been minimized.

@norzechowicz

norzechowicz Jun 9, 2015

Member

Forma dla całego FAQ powinna być spójna.

This comment has been minimized.

@adampiotrowski

adampiotrowski Jun 10, 2015

@iwankgb Nie, to cały czas dość mocno personalna wycieczka po Laravel. Fakt że podajesz mocne (i pewnie dla większości wystarczające) argumenty, ale jak dla mnie forma nie jest odpowiednia. Widziałbym to raczej na jakimś blogu.

Moim zdaniem każdy powinien wyciągnąć odpowiednie wnioski, programowaniem raczej nie zajmują się kompletni idioci bez zdolności analitycznych ;), a zadaniem FAQ jest tak naprawdę wskazanie odpowiednich źródeł. Wydaje mi się że lepiej tutaj sprawdzi się forma wypunktowania konkretnych ułomności z bardzo konkretnymi przykładami.

Nie leciałbym tutaj w coś takiego jak napisał Ocramius, nie ma sensu duplikować, ale na pewno warto zalinkować z wyjaśnieniem kim on jest i czym się zajmuje. https://gist.github.com/anonymous/8565929

index.html Outdated
Ja, piszący te słowa, pracowałem przez dwa miesiące z Laravelem i moja do niego niechęć nie opiera się na zawiści wobec Taylora Otwella.
</p>
<p>
Laravel używa biblioteki o nazwie Eloquent, która ma być ORM, a tak naprawdę jest to Active Record. Doświadczenia z Eloquentem mam następujące:

This comment has been minimized.

@llubosz

llubosz Jun 9, 2015

Contributor

Nie jest, a implementuje

index.html Outdated
</ol>
<p>
Występują też w przyrodzie zjawiska, których po prostu nie rozumiem:

This comment has been minimized.

@llubosz

llubosz Jun 9, 2015

Contributor

W jakiej przyrodzie i skoro Ty nie rozumiesz, to być może ktoś inny zrozumie

@llubosz

This comment has been minimized.

Contributor

llubosz commented Jun 9, 2015

Hm, chciałem się odnieść do szczegółów, ale chyba to bez sensu. Wydaje mi się, że wpis jest bardzo subiektywny, co w FAQ nie powinno się znaleźć. Laravel nie jest szczytem osiągnięć architektury oprogramowania, ale w ten sam sposób powinniśmy opisać każdy przypadek użycia PHP analizując jego wady i zalety. Imho - bez sensu.

@iwankgb

This comment has been minimized.

iwankgb commented Jun 10, 2015

PR został w dużej mierze przebudowany.

index.html Outdated
<li>Alternatywą dla Dependency Injection są <a href="http://laravel.com/docs/5.1/facades">Fasady</a>. Ich nadużywanie prowadzi do sytuacji, w której trudno jest określić zależności danej klasy. Planowane jest wprowadzenie funkcjonalności pozwalającej na <a href="http://laravel.com/docs/master/blade#service-injection">dostęp do serwisów z poziomu template'ów.</a></li>
<li>Ze względu na Fasady w <a href="https://github.com/laravel/framework/blob/v5.0.32/src/Illuminate/Support/Facades/Facade.php#L42">produkcyjnym kodzie</a> znajdują się metody służące wyłącznie testowaniu.</li>
<li>Zapisywanie obiektu do bazy realizowane jest za pomocą <a href="https://github.com/laravel/framework/blob/v5.0.32/src/Illuminate/Database/Eloquent/Model.php#L1185">statycznej metody save()</a>, której mockowanie w testach jednostkowych jest mocno utrudnione.</li>
<li>Przykładem nadużywanie statycznego dostępu jest klasa odpowiedzialna za <a href="https://github.com/laravel/framework/blob/v5.0.32/src/Illuminate/Support/Str.php">operacje na ciągach znaków</a>.</li>

This comment has been minimized.

@iwankgb

iwankgb Jun 10, 2015

@efik - poprawione. Ja mam tendencję do pisania w taki sposób jak oryginał był napisany ;)

@iwankgb

This comment has been minimized.

iwankgb commented Jun 11, 2015

W trakcie rozmowy z @flashek na #mikolow powstała koncepcja omówienia tego (i innych podobnych wpisów) na PHPConie. Jak mają wyglądać, jak ma wyglądać proces decyzyjny dotyczący odrzucania bądź akceptowania takich zmian itp, itd.

</ul> <!-- cd-faq-group -->
</ul>
<ul id="frameworki" class="cd-faq-group">
<li class="cd-faq-title"><h2>Frameworki</h2></li>

This comment has been minimized.

@norzechowicz

norzechowicz Jun 11, 2015

Member

To nie powinno być "Wady i zalety wybranych Frameworków" ?

This comment has been minimized.

@leafnode

leafnode Jun 11, 2015

Contributor

Nie koniecznie - może o innym fw będziemy pisać same zalety :]

This comment has been minimized.

@norzechowicz

norzechowicz Jun 11, 2015

Member

Nie ma frameworków, które mają same zalety :D

<ul id="frameworki" class="cd-faq-group">
<li class="cd-faq-title"><h2>Frameworki</h2></li>
<li>
<a class="cd-faq-trigger" href="#0">Laravel</a>

This comment has been minimized.

@norzechowicz

norzechowicz Jun 11, 2015

Member

"Laravel - Wady" ?

This comment has been minimized.

@leafnode

leafnode Jun 11, 2015

Contributor

👍 - wady, zarzuty, cokolwiek informującego, że to nie jest opis całego fw, a tylko odpowiedź na pytanie "co wy się tak tego lrv czepiacie"

index.html Outdated
<div class="cd-faq-content">
<p>Eloquent (dostęp do bazy danych):</p>
<ol>
<li>Dostępne są dwa query buildery: użycie <a href="https://github.com/laravel/framework/blob/v5.0.32/src/Illuminate/Database/Eloquent/Builder.php">pierwszego z nich</a> powoduje zwrócenie obiektów Active Record, natomiast <a href="https://github.com/laravel/framework/blob/v5.0.32/src/Illuminate/Database/Query/Builder.php">drugi</a> zwraca tablice.</li>

This comment has been minimized.

@norzechowicz

norzechowicz Jun 11, 2015

Member

To na pewno jest wada? Doctrine też pozwala wykonać query żeby zwróciło tablicę lub obiekty. Fakt, to powinna być opcja i hydrator a nie builder osobny ale samo istnienie dwóch builderów nie wydaje mi się jakoś tragiczne.

This comment has been minimized.

@iwankgb

iwankgb Jun 11, 2015

Uważam, że to wada, bo zapytania są takie same bez względu na formę, w której zwrócone są wyniki.

This comment has been minimized.

@norzechowicz

norzechowicz Jun 11, 2015

Member

Co z tego? Doctrine też generuje takie same zapytanie niezależnie jaką strategię hydracij wybierzesz.

This comment has been minimized.

@iwankgb

iwankgb Jun 12, 2015

Norbercie, zapytania z query buildera ORMowego i DBALowego są zupełnie inne (a o takiej różnicy właśnie mówimy w przypadku Laravela - "ORM" i surowe zapytania). Zauważ też, że żaden z builderów doctrine'owych nie zwraca encji - encje może zwrócić co najwyżej repozytorium (w przypadku Laravela jest to odpowiedzialność query buildera - np. https://github.com/laravel/framework/blob/v5.0.32/src/Illuminate/Database/Eloquent/Builder.php#L75). Bardziej sensownie będzie chyba faktycznie położyć akcent w tym miejscu: zadaniem query buildera jest budowanie zapytań, a nie hydrowanie obiektów.

This comment has been minimized.

@norzechowicz

norzechowicz Jun 12, 2015

Member

https://github.com/laravel/framework/blob/v5.0.32/src/Illuminate/Database/Eloquent/Builder.php to nie jest query builder - to jest jakiś tam Eloquent builder. To jest https://github.com/laravel/framework/blob/v5.0.32/src/Illuminate/Database/Query/Builder.php query builder i on faktycznie nie powinien wykonywać query tylko je budować (tworzyć -> uzupełniać -> zwracać).

Co do Dotrine to nie mieszajmy w to DBAL'a. Te przypadki nie są w ogóle do siebie podobne. Encji nie zwraca repozytorium tylko hydrator wywołany na query podczas wykonywania getResults. Samo query natomiast można zbudować QueryBuilderem. Jednak niezależnie od tego jaką strategię hydracji wyników wybierzesz samo zapytanie do bazy się nie zmieni, hydracja wykonuje się na pobranych danych a nie na zapytaniu.

This comment has been minimized.

@iwankgb

iwankgb Jun 12, 2015

Norbercie - nie "jakis tam", tylko jeden z dostępnych w projekcie i ściśle (oraz bardzo źle) połączony z drugim. Zgadzam się w pełni z tym, że należy to zdanie przeformułować i położyć nacisk na to, że jeden z nich pełni rolę repozytorium. Pasuje?

This comment has been minimized.

@norzechowicz

norzechowicz Jun 12, 2015

Member

Nie pełni roli repozytorium. Właśnie problem w tym, że nie wiadomo jaką "to coś" rolę pełni albo jaką próbuje pełnić. Wygląda mi to na coś w rodzaju Data Access Object, który wewnętrznie korzysta z QueryBuilder, który z kolei nie jest nawet builderem, po prostu implementuje fluent interface co jeszcze nie robi z niego buildera. Swaglor widzę nie tylko Fasady od Proxy nie odróżnia ale też myśli, że jak coś zwraca w każdej metodzie $this to jest builderem.

</ol>
<p>Dostęp statyczny:</p>
<ol>
<li>W Laravelu dostępny jest moduł Dependency Injection oparty o Reflection i <a href="http://laravel.com/docs/5.1/container#resolving">mogący działać bez żadnej konfiguracji</a>. Znajdowały się w nim pewne <a href="https://github.com/laravel/framework/pull/4824">niedoskonałości</a> mogące skutecznie utrudnić debugowanie.</li>

This comment has been minimized.

@norzechowicz

norzechowicz Jun 11, 2015

Member

Znajdowały się w nim pewne...

Skoro się już nie znajdują to po co o nich pisać?

This comment has been minimized.

@iwankgb

iwankgb Jun 11, 2015

Bo daje to pojęcie o jakości projektu.

This comment has been minimized.

@norzechowicz

norzechowicz Jun 11, 2015

Member

Gdyby PR nie został zmergowany można by było użyć takiego argumentu.

This comment has been minimized.

@iwankgb

iwankgb Jun 14, 2015

Nie piszę, że Taylor nie merdżuje PRów. Zwracam uwagę na to, że nawet te fragmenty kodu, które wydają się być dość sensowne mają zwyczaj być niedopracowane.

<li>W Laravelu dostępny jest moduł Dependency Injection oparty o Reflection i <a href="http://laravel.com/docs/5.1/container#resolving">mogący działać bez żadnej konfiguracji</a>. Znajdowały się w nim pewne <a href="https://github.com/laravel/framework/pull/4824">niedoskonałości</a> mogące skutecznie utrudnić debugowanie.</li>
<li>Alternatywą dla Dependency Injection są <a href="http://laravel.com/docs/5.1/facades">Fasady</a>. Ich nadużywanie prowadzi do sytuacji, w której trudno jest określić zależności danej klasy. Planowane jest wprowadzenie funkcjonalności pozwalającej na <a href="http://laravel.com/docs/master/blade#service-injection">dostęp do serwisów z poziomu template'ów.</a></li>
<li>Ze względu na Fasady w <a href="https://github.com/laravel/framework/blob/v5.0.32/src/Illuminate/Support/Facades/Facade.php#L42">produkcyjnym kodzie</a> znajdują się metody służące wyłącznie testowaniu.</li>
<li>Zapisywanie obiektu do bazy realizowane jest za pomocą <a href="https://github.com/laravel/framework/blob/v5.0.32/src/Illuminate/Database/Eloquent/Model.php#L1185">statycznej metody save()</a>, której mockowanie w testach jednostkowych jest mocno utrudnione.</li>

This comment has been minimized.

@norzechowicz

norzechowicz Jun 11, 2015

Member

Ale po co w testach jednostkowych mockować save? To już mi śmierdzi testami integracyjnymi a nie jednostkowymi. Jeżeli te modele AR potraktujesz jako DAO, tego problemu nie ma.

This comment has been minimized.

@iwankgb

iwankgb Jun 11, 2015

Np. w celu zbudowania złożonych relacji w bazie; musisz zapisać jeden obiekt, żeby inny mógł być w relacji do niego.

This comment has been minimized.

@norzechowicz

norzechowicz Jun 11, 2015

Member

I to jest Twoim zdaniem testowane w testach jednostkowych?

This comment has been minimized.

@iwankgb

iwankgb Jun 12, 2015

Przede wszystkim uważam, że nie jest to przedmiotem tego PRa. Będę bardzo zobowiązany jeśli zechcesz wrócić do meritum.

This comment has been minimized.

@norzechowicz

norzechowicz Jun 12, 2015

Member

Nie możesz nazwać wadą frameworka, to że źle go używasz - to jest meritum. O ile sama statyczna metoda ::save jest zła tak argumentacja w tym przypadku dlaczego tak jest też nie jest o wiele lepsza.

This comment has been minimized.

@iwankgb

iwankgb Jun 12, 2015

Norbercie, nie uważam, żebym go źle używał. Jeśli chcesz prowadzić dyskusję na ten temat, to zapraszam: mail, Facebook, Twitter. Ja się z Tobą po prostu nie zgadzam i nie zamierzam zmieniać tego fragmentu.

This comment has been minimized.

@norzechowicz

norzechowicz Jun 12, 2015

Member

Masz takie prawo, ja natomiast nie zgadzam się z argumentacją jaką przedstawiłeś, jest niejasna, najprawdopodobniej problemy, które napotkałeś są wynikiem braku odpowiedniej warstwy abstrakcji co uniemożliwiło Ci napisanie odpowiednich testów - moim zdaniem to dyskwalifikuje ten wpis.

This comment has been minimized.

@iwankgb

iwankgb Jun 13, 2015

Norbercie, warstwa abstrakcji (czy raczej to co sie za nia kryje) tez musi mieć jakieś testy. Prędzej czy później dojdziesz do momentu, w którym zawolasz persist() albo save(). Oczywiście - może być to test funkcjonalny (tak by pewnie sugerowała Clean Architecture).
Uważam wszakże, ze pisanie zawsze kodu doskonale oderwanego od frameworka, jest działaniem niepotrzebnym. W pewnych sytuacjach wręcz niemożliwym (sam wspominales o CA i Laravelu w ostatni poniedziałek w Gdańsku)
W imię zasad to Franz Maurer kolegę zastrzelił i nic dobrego z tego nie wyniknelo ;)

Pozdrawiam/Regards,
Iwan.

<li><a href="https://github.com/laravel/framework/blob/v5.0.32/src/Illuminate/Database/Eloquent/Builder.php">Eloquent\Builder</a> nie dziedziczy po <a href="https://github.com/laravel/framework/blob/v5.0.32/src/Illuminate/Database/Query/Builder.php">Query\Builder</a>. W zamian metoda <a href="https://github.com/laravel/framework/blob/v5.0.32/src/Illuminate/Database/Eloquent/Builder.php#L920">__call()</a> powoduje wywoływanie metod nieistniejących w Eloquent\Builder na <a href="https://github.com/laravel/framework/blob/v5.0.32/src/Illuminate/Database/Eloquent/Builder.php#L17">właściwości</a> tej klasy będącej instancją Query\Builder.</li>
<li>W podobny sposób działa <a href="https://github.com/laravel/framework/blob/v5.0.32/src/Illuminate/Auth/AuthManager.php">AuthManager</a>, który pozwala niejawnie <a href="https://github.com/laravel/framework/blob/v5.0.32/src/Illuminate/Support/Manager.php#L137">wykonywać</a> dzialanie na <a href="http://laravel.com/docs/5.0/authentication#retrieving-the-authenticated-user">klasie</a>, której instancja jest elementem <a href="https://github.com/laravel/framework/blob/v5.0.32/src/Illuminate/Support/Manager.php#L27">tablicy</a> będącej jego właściwością. <a href="">Dyskusja</a></li>
<li>Opisane powyżej podejście znacznie utrudnia debugowanie i zrozumienie wewnętrznych mechanizmów frameworka.</li>
</ol>

This comment has been minimized.

This comment has been minimized.

@iwankgb

iwankgb Jun 14, 2015

Dorzuciłem. Bo jest ładniejsze niż się na pierwszy rzut oka wydaje.

@norzechowicz

This comment has been minimized.

Member

norzechowicz commented Jun 11, 2015

Myślę, że warto byłoby też dodać przy każdym punkcie, których wersji Laravela dotyczy.

@iwankgb

This comment has been minimized.

iwankgb commented Jun 14, 2015

@norzechowicz - jest wersja.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment