Witajcie mirki.
Może ktoś mógłby zarzucić przykładem w jaki sposób zrobić "XLSPrinter."
Chodzi mi o to, że jest coś takiego jak "liuggio/excelbundle", które wykorzystuję do generowania plików xls. Jednak nie wiem czy to dobra praktyka za każdym razem w kontrollerze od nowa tworzyć plik xls, może lepiej byłoby stworzyć serwis, gdzie przekazywałbym:
1. Nagłówki tabelki
2. dane
3. typ pliku
4. Nazwa pliku
A otrzymywałbym gotowy plik .xls. Nie wiem czy dobrze
Witam mirków z #php i #symfony2 #symfony #webdev #webdevhelp
Mam w bazie danych tabelę user. Są już tam użytkownicy, teraz chcę dodać kolumnę slug, która musi być unikalna (będę tego używał do wyświetlania nazwy użytkownika w pasku adresu). W encji piszę takie coś:

/**
*
* @var string
*
* @Gedmo\Slug(fields={"name", "surname"}, updatable=true)
* @ORM\Column(name="slug", type="string", nullable=false, unique=true)
*/
protected $slug;

Kiedy jednak uruchamiam polecenie php app/console doctrine:schema:update
@mariecziek: chodziło mi o to, że generalnie na produkcji nie używa się raczej schema:update tylko właśnie migracji. Powinieneś przygotować migrację która utworzy kolumnę "slug" (nie unique), następnie ją uzupełni po czym ustawi odpowiedni indeks unikalny.
@qwelukasz: zendFramework - ja #!$%@?, przyrost formy nad treścią, tam prawie nic nie ma, wszystko robisz w konfiguracji, w 3 miejscach musisz ustawic routing - zrobic routing, zarejestrowac kontroler, ustawic kontroler jako ze moze byc wykonywalny, ORM #!$%@? w dupę wsadzić od nich. Zend jest fajny, jak nie będziesz z niego korzystać xD
Service locator - nie wiem jak teraz jest, ale za moich czasów - zend 2 nie było pluginów
@qwelukasz:

1. Społeczność (gugle, stackoverflow, irc – szybko znaleźć można odpowiedź)
2. Dokumentacja
3. Stabilność (jasna polityka kompatybilności wstecznej)
4. Oparcie się o paradygmat Request/Response
5. DIC
6. Niezależne komponenty
7. W miarę sensowny kod (lepszy i gorszy, ale przeważnie lepszy)
@DobryProgramista: nie wiem co tu się #!$%@?ło - napisałeś posta z konkretnym zapytaniem, a tu od razu dwa komentarze z bólem dupy o webdev i PHP xD.

Na Symfony stoi między innymi BlaBlaCar, Spotify oraz... hmm... Laravel ;). To bardzo solidny framework, który garściami czerpie z Javowego Springa - i jak na PHP, robi to bardzo dobrze. Laravel ma za to niższy próg wejścia i ładniejsze hasełka reklamowe - bardzo to
Mirki, mam #pytanie do #symfony2 #php #angularjs - po raz drugi, bardziej sprecyzowane ( ͡ ͜ʖ ͡)

- Mam sobie listę złożonych wniosków w panelu admina w różnych kategoriach
- Obok każdej kategorii chcę umieścić liczbę NOWYCH, nie rozpatrzonych przez admina wniosków

Wszystko to jest oparte na AngularJS, więc w Symfony jest to REST API.

I teraz nie wiem jak tą liczbę nowych wniosków wykonać.
Czy:
-
@MacDada: ale gdzie przy restapi będziesz latał po obiektach ? po co i na co ? przecież w restapi pobierasz coś bazy i zwracasz to i tyle, nic więcej się z tym nie robi zwykle
ale gdzie przy restapi będziesz latał po obiektach?


@Jurigag:

1. Wchodzę do kontrolera
2. Zastanawiam się co tam za jakieś dane są pobierane
3. Patrzę w to, co mi podpowiada IDE albo wchodzę w definicję interface'u, który używa kontroler, a tam array. No to się dowiedziałem…

Klasy > arraye jeśli chodzi o czytelność.

4. Przekazuję tego arraya do jakiejś mielarki, co robi różne rzeczy z danymi przy okazji (może podmienia
Mirki, mam bardziej teoretyczny problem z Symfony2.
Otóż... chcę umieścić w widoku, ile nowych wiadomości w różnych skrzynkach czeka na użytkownika. Nie wiem w jaki sposób to najlepiej zrobić. Dodać nowe pole w encji z wiadomością "unread", i później w kontrolerze je uzupełnić licząc zapytaniem, ile ich jest? Wtedy będę miał do tego najłatwiejszy dostęp w widoku, ale brzmi to trochę januszowo. Niby banalny problem, no ale jednak chcę to zrobić jak
@Spake: No to praktycznie ten sam problem co zapytałeś wcześniej. Przynajmniej jeśli chodzi o umiejscowienie danych:

a.) kiedy pobierasz kategorię, zaciągać razem z nią wnioski i w pętli zliczyć ile pozostało nowych

b.) „keszować” sobie tę informację w kategorii – czyli do kategorii dołożyć dodatkową kolumnę i za każdym razem, gdy ustalasz jakiś wniosek, zwiększać/zmniejszać licznik dla kategorii


W tym przypadku podobnie: albo zliczasz powiadomienia na bieżąco albo musisz gdzieś
@GeneralX:

1. Piszesz kod domenowy – ustalasz „inwarianty” – przydają się ValueObjects.
2. Piszesz UI, robisz jak najwięcej walidacji HTML5+JS => żeby użytkownik miał szybki feedback, a nie jakieś średniowieczne przeładowania strony.
3. To, czego nie pokryłeś w walidacji po stronie przeglądarki, uzupełniasz walidacją Symfonową.

---

ad.1

Przykład:

class Person
{
    public function setAge(int $age)
    {
        if ($age <= 0) {
            throw new DomainException(sprintf('Age must be greater than 0, %d given',
@GeneralX: A jeśli pytasz o format reguł walidacji: osobiście preferuję ustalać je bezpośrednio przy robieniu Form Typea – chyba, że mam jakieś ładne DTO dla formularza, to być może zdecydowałbym się na annotacje albo Yamle (w jednym projekcie używamy Yamli – tylko minus jest taki, że trzeba grepować, żeby dowiedzieć się czy są jakieś reguły zdefiniowane – więc chyba pokusiłbym się przy następnym do annotacji).
aby zdobyć token musi najpierw mieć clientid oraz clientsecret a co za tym idzie najpierw musi się zalogować by pobrać te dane.


@qwelukasz: Generalnie to nie jest pytanie odnośnie Symfonowych Bundli, tylko ogólnie na temat OAuth.

ClientId i ClientSecret to nie są dane identyfikujące użytkownika, tylko aplikację klienta.

Po co? W ten sposób możesz ograniczyć, że z API może korzystać np tylko Twoja aplikacja mobilna albo tylko jakiś inny Twój serwer,
Trochę spamu w tagu, sorry ( ͡° ͜ʖ ͡°).

Uczę się #symfony2 od około pół roku. Raczej kompleksowo - core, konfigi pod środowiska, doctrine, fixturesy, formsy, votery, acl, security, providery, LDAP, serwisy, testy (phpunit, codeception), jakieś bundle, obsługa eventów itp.

Po 2 latach przerwy wróciłem (w sumie trochę przypadkiem) z frontendu do backendu i muszę powiedzieć, że tworzenie w tym aplikacji webowych pod REST API, to po prostu
@gajowy_marucha:

1. To nie jest pytanie odnośnie Symfony tylko odnośnie Doctrine.
2. Doctrine do ustawienia pól na podstawie bazki używa refleksji. Więc możesz w ogóle nie mieć setterów.
3. Settery są dla Ciebie, ewentualnie do CRUDowania Symfonowymi Formsami, etc.
4. Jak nie chcesz popaść w Anemic Domain Model, to przemyśl które settery faktycznie potrzebujesz (bo raczej wartości powinny przyjść w konstruktorze i być mutowane grupami niż oddzielnie).
@gajowy_marucha: możesz sobie nieco rozdzielić encje od tego co wypluwają formularze. osobiście wydłużam nieco ten process, robię sobie encje bez setterów (unikam jeśli tylko mogę, dzięki temu mam małe szanse zmienić w encji coś w locie i zapomnieć o tym), natomiast do formularza trafia prosta klasa, którą nazywam sobie np. CreateUserCommand, zawiera tylko publiczne pola, jeśli przejdzie walidację a cały formularz "się uda" to leci do CreateUserHandlera, który z pomocą fabryk
Witajcie.
Jest taka sytuacja. Korzystając z #symfony2 i #doctrine pobieram rekordy z bazy danych. Używam zarówno find(), findAll(), findOneBy() itd. Piszę też zapytania do db korzystając z query builder. Wydaje mi się jednak, że mam za dużo zapytań do bazy danych. Na jednej stron mam 36 zapytań do bazy danych , mimo że tam wyświetlam tylko statystykę o produktach i użytkownikach (użytkownik - ilość głosów, produkt - ilość głosów).
W poprzedniej pracy
#symfony2 #symfony
http://symfony.com/doc/current/cookbook/assetic/uglifyjs.html#minify-your-assets

Załóżmy że chcę użyć minify/uglify dla js oraz css.
Czy lepiej robić to przez assetic czy np przez GRUNT?
W przypadku gruntu plik jest tworzony raz i potem przy każdej zmianie trzeba go na nowo wygenerować
w przypadku assetic (jesli dobrze rozumiem) plik jest tworzony wirtualnie i za każdym razem generowany przez serwer..

Czego wy używacie w projektach i dlaczego? Co możecie polecić?
W jaki sposób zmienić wersję #php z którego działa #apache. Sytuacja jest taka. Zainstalowałem sobie w listopadzie server LAMP na #ubuntu 14.04 przy pomocy sudo apt-get install lamp-server^. Wszystko działało jak należy. Po jakimś czasie zrobiłem update PHP do wersji 5.6 i też było wszystko w porządku. Dzisiaj zaktualizowałem system i wyświetliło mi komunikat, że PPA is deprecated i mam zrobić:

sudo LC_ALL=C.UTF-8 add-apt-repository ppa:ondrej/php
sudo apt-get update
sudo apt-get
@mariecziek: Jeśli nie masz jeszcze rozwiązania to łap:

#!/bin/bash

sudo a2dismod php7.0
sudo a2enmod php5.6
sudo service apache2 restart

sudo ln -sfn /usr/bin/php5.6 /etc/alternatives/php

#!/bin/bash

sudo a2dismod php5.6
sudo a2enmod php7.0
sudo service apache2 restart

sudo ln -sfn /usr/bin/php7.0 /etc/alternatives/php
#NieDlaKlepaczyKodu:Symfony: Różne sposoby na strony błędów w kontrolerach

#niedlaklepaczykodusymfony <<< Subskrybuj ten tag po więcej albo czarnolistuj, jeśli nie chcesz widzieć wpisów z tej serii. Więcej info na dole wpisu.

Symfonowe kontrolery działają w ramach abstrakcji HTTP: przyjmują „żądanie” (reprezentowane przez obiekt Request) i zwracają „odpowiedź” (obiekt Response).

Załóżmy, że chcemy odpowiedzieć klientowi (przeglądarce/użytkownikowi), że strona nie istnieje, czyli zwrócić odpowiedź ze statusem 404.
Najbardziej oczywistym sposobem
@qwelukasz: ogólnie to wygląda tak: jeżeli zawsze używasz tej samej funkcji łączącej, to używasz jej przez normalnie. Jeżeli chcesz używać wielu funkcji łączących, które działają inaczej w zależności od potrzeb (np. w innym programie albo w testach jednostkowych), to korzystasz z kontenera.
@qwelukasz: OK, więc masz narzędzie, które robi jakiś bajer z danymi.

Jeśli to narzędzie potrzebuje konfigurowania => leci jako usługa.

Jeśli to narzędzie jest „podmienialne” (np twoje narzędzie nazywa się Bar i w Foo możemy chcieć je podmienić na inne), to zasługuje na bycie wstrzykiwalną usługą.

Jeśli nie musi być konfigurowane, nie przewidujesz, żeby miało być podmienialne –> może być klasa z metodami statycznymi.
An exception has been thrown during the rendering of a template ("Time zone different than GMT or UTC is not supported as a formatting output. Please install the "intl" extension for full localization capabilities.") in base.html.twig at line 150.

Taki błąd rzuca appka demo do #symfony2, odpalam na przestarzałym #php, da sie coś z tym zrobić czy aktualizować php/apache/kernel/cpu?
#programowanie