Niezalogowany [ logowanie ]
Subskrybuj kanał ATOM Kanał ATOM    Subskrybuj kanał ATOM dla tagu php Kanał ATOM (tag: php)

Autor wpisu: Kamil Adryjanek, dodany: 06.03.2013 02:23, tagi: symfony2, php, symfony

Symfony2 comes with a very nice validation system and allows us for example to add a constraint to any public method whose cheap viagra name starts with „get” or „is” („Getters”) and not only. In combination with the Validation Groups it is a really powerfull tool. This time i want to show you how to map those errors.

Adding custom method to entity we can add some extra validations for example to address field:

<?php
// some entity class
/**
 * Checks if user provides a valid address
 *
 *  @Assert\True(message = "user.address.invalid")
 */
public function isAddressValid()
{
    // some logic
}

Now this entity will be also checked against extra rules form isAddressValid method. That’s really cool and easy but there was one thing that forced me to choose Callback Validation and its:

$context->addViolationAt('address', 'user.address.invalid', array(), null);

instead of Getters in many cases: i was not allowed to assign errors to specific fields on my object. It means that i couldn’t make these errors display next to a specific field and they were displayed at the top of my form – since Symfony2.1 it’s not a problem any more.

Thank to new error mapping funcionality: „error_mapping” we can now set which method should be mapped to a given field”:

<?php
class UserType extends AbstractType
{
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'error_mapping' => array(
                // this line tells Symfony to assign Getter Constraint to address property
                'addressValid' => 'address'
             ),
        ));
    }
}

Since error_mapping is set, errors will be displayed next to address filed.

We can also use dot for building nested property paths and assign errors to embedded forms:  ‚cityValid’ => ‚address.city’ or ‚address.cityValid’ => ‚city’ – depending on our needs.

Ecard Wizard Greeting Card Software zp8497586rq

Autor wpisu: Marek, dodany: 07.02.2013 19:50, tagi: php, zend_framework

zfNaszym zadaniem jest, oprócz zapisywania błędów aplikacji do logu, automatyczne wysyłanie informacji o problemie na zdefiniowanego maila. Jak to zrobić za pomocą Zend_Log?

Najpierw zainicjujmy zasób log w pliku konfiguracyjnym application.ini:

; log
resources.log.file.writerName = "Stream"
resources.log.file.writerParams.stream = APPLICATION_PATH "/../data/logs/app.log"
resources.log.file.filterName = "Priority"
resources.log.file.filterParams.priority = 5

Informacje o priorytecie 5 (Zend_Log::NOTICE) i ważniejsze zapisywać będziemy do pliku app.log.

Plik Bootstrap.php:

/**
* Log aplikacji
*/
protected function _initRegisterLogger() {
    $this->bootstrap('Log');
    $logger = $this->getResource('Log');

    if ('production' == $this->getEnvironment()) {
        // konfiguracja wiadomości wysyłanej na maila
        $mail = new Zend_Mail('UTF-8');
        $mail->setSubject('Hekima - raport błędu!');
        $mail->addTo('mheki@localhost');

        $writerMail = new Zend_Log_Writer_Mail($mail);

        // logowane tylko błędy z priorytetem WARN i wyższym
        $filter = new Zend_Log_Filter_Priority(Zend_Log::WARN);
        $writerMail->addFilter($filter);

        $logger->addWriter($writerMail);
    }
    // Zapis do rejestru
    Zend_Registry::set('Zend_Log', $logger);
}

Kilka słów wyjaśnienia. Pobieramy zasób Log, w przypadku produkcyjnego środowiska aplikacji, tworzymy obiekt klasy Zend_Mail, który posłuży do wysyłania wiadomości,  a także ustawiamy osobny priorytet wysyłanych informacji (Zend_Log::WARN), następnie informujemy obiekt logujący o tym, żeby logi wysyłał na maila. Na koniec możemy jeszcze zapisać obiekt logujący do rejestru celem późniejszego użycia w aplikacji.

W ostatnim kroku możemy jeszcze rozszerzyć wysyłane informacje, modyfikując w klasie ErrorController domyślną metodę errorAction(). Zamieniamy kod:

if ($log = $this->getLog()) {
    $log->log($this->view->message, $priority, $errors->exception);
    $log->log('Request Parameters', $priority, $errors->request->getParams());
}

na:

if (($log = $this->getLog())) {
    $log->log($this->view->message, $priority, $errors->exception);
    $log->log($errors->exception->getMessage(), $priority);
    $log->log('Parametry wywołania: ' . print_r($errors->request->getParams(), true), $priority);
}

Metoda getLog() wygląda tak:

public function getLog() {
    $bootstrap = $this->getInvokeArg('bootstrap');
    if (!$bootstrap->hasResource('Log')) {
        return false;
    }
    $log = $bootstrap->getResource('Log');
    return $log;
}

A otrzymany mail przykładowo może wyglądać tak:

2013-01-29T09:05:54+01:00 CRIT (2): Błąd aplikacji
2013-01-29T09:05:54+01:00 CRIT (2): SQLSTATE[42S02]: Base table or view not found: 1146 Table 'hekima.test_events' doesn't exist
2013-01-29T09:05:54+01:00 CRIT (2): Parametry wywołania: Array
(
    [module] => test
    [controller] => event
    [action] => index
)

 

Czytaj dalej tutaj (rozwija treść wpisu)
Czytaj dalej na blogu autora...

Autor wpisu: singles, dodany: 03.02.2013 22:58, tagi: mysql, php

Kolejną ksiażką, którą otrzymałem do zrecenzowania od Wydawnictwa Helion jest **PHP i MySQL dla każdego”. Autorem jest Marcin Lis, a ksiażka jest „świeżynką”, ponieważ została wydana w roku 2013.

PHP - MySQL dla każdego

PHP – MySQL dla każdego

Uprzedzając – czy jest to artykuł sponsorowany? W jakiś sposób tak – książka zostanie u mnie i zostanie przeznaczona na nagrodę na następnym meet.php. Czy moje opinie są sponsorowane? Zdecydowanie nie.

Treść

Ksiażka jest typowym wprowadzeniem do języka PHP jak i MySQLa. O ile do „dla każdego” mógłbym się przyczepić (patrz podsumowanie recenzji), to zdecydowanie jest to ksiażka dla początkujących.

Ksiażka podzielona jest na 3 części. Pierwsza tyczy się stricte PHP, druga MySQLa, a trzecia łączenia wcześniej wymienionych.

Tak więc w przypadku PHP mamy spory rozdział o instalacji, potem o zmiennych, poprzez instrukcje sterujące itd. Znalazło się także miejsce na rozdział o programowaniu obiektowym (który jest 2 razy krótszy niż rozdział o instrukcjach warunkowych). Po opisaniu podstaw PHP przychodzi czas na opisanie podstaw MySQLa. No i ponownie mamy instalację, następnie czytamy o tym czym są tabele, jak je obsługiwać i jak dodawać, pobierać dane. Część trzecia opisuje na podstawowych przykładach, jak łączyć wspomniane technologie na przykładzie takich rzeczy jak system newsów czy też generowanie statystyk.

Po zapoznaniu się z ksiażką stwierdzam, co następuje – 2/3 ksiazki to tak naprawdę przeredagowany manual dla PHP i MySQLa wydrukowany na papierze, z tym że z większą ilością przykładów. Co nie znaczy, że to coś złego. Cieżko powiedzieć coś wiecej – nie zauważyłem jakiś błedów merytorycznych, aczkolwiek mam kilka uwag:

  • z niektórych rozdziałów bym zrezygnował – skoro to dla poczatkujących to zostawmy programowanie obiektowe w spokoju, tym bardziej, że jest potraktowane mocno po łebkach,
  • ksiażka jest z roku 2013, a o PHP 5.4 ani słowa – aczkolwiek, może to być kwestia procesu wydawniczego,
  • umieszczanie w tekście określen „implozja i eksplozja” nie wydaje się mi pomysłem trafnym ;),
  • w ksiażce w jednym miejscu znajduje sie kawałek kodu w JS (do walidacji formularza), który jest moim zdaniem totalnie zbędny,
  • w przypadku ksiażki dla początkujących polecałbym instalację środkowiska za pomocą gotowego pakietu, np. XAMPa, a nie od zera, ale to tylko moja osobista opinia,
  • w rozdziale na temat współpracy PHP z MySQLem przykłady podawane są w 3 formach: mysqli proceduralny i obiektowy oraz PDO (tutaj wielki plus za porzucenie mysql_*), natomiast moim zdaniem w ksiażce dla początkujących jedna forma wystarczy – osobiście wybrałbym PDO,
  • spaghetti code – niestety, ksiażka prezentuje mocno zaawansowany „spaghetti code” – uważam, że wprowadzenie do prostego systemu szablonów nie jest czymś, z czym początkujący programista sobie nie poradzi

Jakość wydania

Książka wydana została w miękkiej oprawie i NIE pochodzi z wydania „eko”. Zawartość zmieszczono na ponad 600 stronach stosunkowo grubego papieru o wysokiej białości. Formatowanie jest bardzo dobre, ważne rzeczy odpowiednio wyróżnione, kod w przykładach drukowany czcionką o stałej szerokości z pogrubionymi słowami kluczowymi. Jeśli chodzi o język kodu, to tak jak nie znoszę listingów w innym języku niż angielski, w ksiażce dla początkujących mogę przymknąć oko.

Jednak na fakt tego, że raz listingi są po polsku a raz po angielsku, to oka już nie przymykam.

Podsumowanie

Mam problem z takimi ksiażkami.. Mianowicie, chodzi mi o człon „Dla każdego”. No i tutaj jest problem. Programowanie nie jest dla każdego. I nie, jestem daleki od wywyższania się. Bo tak samo nie dla każdego jest śpiewanie, malowanie, gotowanie czy też praca z klientem.

Czytaj dalej tutaj (rozwija treść wpisu)
Czytaj dalej na blogu autora...

Autor wpisu: kicaj, dodany: 03.02.2013 10:30, tagi: php

Za każdym razem, kiedy przygotowuje nowy serwis staram się wymyślić jak rozwiązać jeszcze lepiej temat internacjonalizacji. Głównie nurtuje mnie wyświetlanie dynamicznej treści w przypadku kiedy ta nie została przetłumaczona. Jak przygotować wyszukiwanie przyjaznych linków w naszej bazie (ang. friendly urls, slugs). Jak rozwiązać problem z trasowaniem tych linków oraz jak wykonać przełączanie i

Autor wpisu: batman, dodany: 31.01.2013 08:00, tagi: php, zend_framework

Druga wersja Zend Frameworka, rodząca się w bólach, ujrzała światło dzienne kilka miesięcy temu. Zanim mogliśmy cieszyć się stabilną wersją frameworka, otrzymaliśmy do testów kilka wersji beta oraz rc, które stopniowo wprowadzały nas w nowe narzędzie. Wczoraj wydana została wersja (…)

Read the rest of this entry »

Autor wpisu: Tomasz Kowalczyk, dodany: 27.01.2013 22:13, tagi: mysql, php

Myślałem trochę nad całą serią wpisów w tej kategorii i zauważyłem, że bardzo mało (właściwie wcale nie ma) jest wpisów o bazach danych. Na blogu znajduje się już wiele tekstów z linkami o PHP, JavaScripcie i innych językach programowania, a … #LINK#

Autor wpisu: Tomasz Kowalczyk, dodany: 25.01.2013 11:04, tagi: php, doctrine, mysql, symfony, symfony2

Jakiś czas temu chciałem poeksperymentować trochę z bazą danych jednego z projektów FLOSS w Symfony2.         Importując dane z MySQLa poprzez komendę zostałem przywitany przez Doctrine2 wyjątkiem: [Doctrine\DBAL\DBALException] Unknown database type enum requested, Doctrine\DBAL\Platforms\MySqlPlatform may not support … #LINK#
Wszystkie wpisy należą do ich twórców. PHP.pl nie ponosi odpowiedzialności za treść wpisów.