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

Autor wpisu: matipl, dodany: 23.10.2012 17:09, tagi: php

php-logoPółtora roku temu przedstawiłem Wam skomplikowany sposób sprawdzenia platformy/mobilnej przeglądarki za pomocą WURFL (Wireless Universal Resource File) w Zend Framework. Rozwiązanie to wymagało wielu zależności i nie było proste w obsłudze.

Tym razem coś o wiele prostszego. Wykorzystamy do tego wbudowaną w PHP funkcję get_browser(). Jedyne co potrzebujemy z zewnątrz jest to biblioteka browscap, która „nauczy” PHP rozpoznawania platform. Oto przepis:

  1. Ściągamy browscap.ini na nasz serwer i zapisujemy jako /etc/php_browscap.ini.
  2. Edytujemy php.ini dodając/od komentując:
    [browscap]
    browscap = /etc/php_browscap.ini
    
  3. Teraz w PHP możemy w prosty sposób rozpoznać platformę, na której otworzona jest nasza strona:
    $browser = get_browser($request['http_user_agent'], true);
    $platform = isset($browser['platform']) ? $browser['platform'] : null;
    
    switch($platform) {
            case 'iOS':
                    $url = 'http://www.matipl.pl/site-for-ios';
                    break;
            case 'Android':
                    $url = 'http://www.matipl.pl/site-for-android';
                    break;
            case 'SymbianOS':
                    $url = 'http://www.matipl.pl/site-for-symbian';
                    break;
            case 'BlackBerry OS':
                    $url = 'http://www.matipl.pl/site-for-bb';
                    break;
            default:
                    $url = 'http://www.matipl.pl/';
                    break;
    }
    

Prawda, że prosto? Co jakiś czas możemy zaktualizować browscap, w którym co jakiś czas pojawia się „obsługa” nowych urządzeń.

PS: W minionym tygodniu ekipa PHP znów połatała błędy. Polecam update do PHP 5.4.8 i PHP 5.3.18.

Autor wpisu: Kamil Adryjanek, dodany: 20.10.2012 13:27, tagi: symfony2, php

Today i would like to share my recent experience on forms and data dependent fields. Playing with Symfony2 forms some time ago i was looking for best solutions of adding fields to forms that depend on the data / Doctrine object – there was nothing about it in the official Symfony documentation. I thought, as many other developers that the best / easiest way is to pass the current object in form constuctor. Today i know it was wrong but what is the recommended solution? Is there any easy way to add / remove form fields?

Imagine a scenario:

Implementing form in the old way i will write code:

<?php

namespace My\AdminBundle\Form;

use My\AdminBundle\Entity\User;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;

class UserType extends AbstractType
{
    protected $user = null;

    public function __construct(User $user)
    {
      $this->user = $user;
    }

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
      $builder
        ->add('firstName', 'text', array('label' => 'First name'))
        ->add('lastName', 'text', array('label' => 'Last name'))
        ->add('email', 'email', array('label' => 'Email address'))
        ;
      // add permissions for none admin users
      if (!$this->user->isAdmin()) {
        $builder
          ->add('permissions', 'entity', array(
        'label'   => 'Access Permisson',
        'class'   => 'AdminBundle:Permission',
        'multiple'  => true,
        'expanded'  => true
      ))
      }
    }

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'My\AdminBundle\Entity\User'
        ));
    }

    public function getName()
    {
        return 'my_adminbundle_usertype';
    }
}

But according to Bernhard Schussek the recommended way of playing with dependent fields in Symfony forms is to add / remove fields using EventListeneres on form events. Using FormEvent we can access our data object ($event->getData()), current form ($event->getForm()) and determine which fields add or remove accoridng to User object.

Yes, it may seem a bit complicated but i will try to show it in UserType example:

<?php

namespace My\AdminBundle\Form;

use My\AdminBundle\Entity\User;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;

class UserType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
      $builder
        ->add('firstName', 'text', array('label' => 'First name'))
        ->add('lastName', 'text', array('label' => 'Last name'))
        ->add('email', 'email', array('label' => 'Email address'))
        ;
      $formFactory = $builder->getFormFactory();
      // add permissions for none admin users
      $builder->addEventListener(FormEvents::PRE_SET_DATA,
        function (FormEvent $event) use ($formFactory) {
          if (!$event-&gt;getData()->isAdmin()) {
            $event->getForm()->add($formFactory->createNamed(
              'permissions', 'entity', null, array(
                'label'   => 'Access Permisson',
                'class'   => 'AdminBundle:Permission&quot',
                'multiple'  => true,
                'expanded'  => true
            )));
          }
        }
      );
    }

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'My\AdminBundle\Entity\User'
        ));
    }

    public function getName()
    {
        return 'my_adminbundle_usertype';
    }
}

Maybe it’s better, maybe it’s recommended way of adding dependent fields but in my opinion it also quite complicated. What about forms where we have many dependent fields? It’s a lot of code just for one filed. It really needs simplification. list of online casinos

Autor wpisu: Vokiel, dodany: 12.10.2012 01:30, tagi: php

PHPCon PL 2012

Chciałem zrobić wpis zaraz po powrocie, ale byłem zbyt wyczerpany ;) Chwila moment i już dwa tygodnie minęły od tegorocznego spotkania PHPCon Poland.

Podobnie jak w latach ubiegłych, spotkanie odbyło się w Hotelu „Przedwiośnie” w Mąchocicach Kapitulnych koło Kielc (btw jeszcze raz wielkie dzięki Łukasz za podwózkę!). Tym razem jednak termin wrześniowy (28 – 30 września) zamiast październikowego z drugiej edycji. Moim zdaniem dobry wybór – bez problemu dało się wytrzymać na sobotnim grillu kilka godzin w jednej bluzie (w przeciwieństwie do ubiegłego roku).

Ponownie ilość chętnych przewyższyła możliwości pojemnościowe, rejestracja została zakończona przed czasem – już w połowie sierpnia

Agenda

W tym roku, wzorem lat ubiegłych, także pojawili się zagraniczni prelegenci: Wim Godden, Thijs Feryn oraz Jeffrey A. “jam” McGuire. Nie zabrakło też bardzo dobrych prezenterów z Polski, pełna agenda dostępna jest na stronie.

Szczególną rzeczą, o której warto wspomnieć było głosowanie na prelekcje. Każdy z zalogowanych użytkowników mógł oddać głoś na wybrane przez siebie propozycje, a przez to mieć wpływ na to, co pojawiło się na finalnej wersji wystąpień. Moim zdaniem umożliwienie odbiorcom aktywnego uczestnictwa w wyborze tematów to świetny pomysł. Doskonale pokazuje ideę tego spotkania – zlotu sympatyków i entuzjastów PHP, zorientowanego na odbiorców.

Organizacja

Jestem pełen podziwu dla organizatorów. Na prawdę należą im się słowa uznania. Niska cena, a taka duża konferencja, tyle prezentacji, do tego w pełne wyżywienie w cenie biletu, zakwaterowanie i jeszcze starczyło na gadżety! Co więcej – nawet na piwko od organizatorów na grillu :)

Wi-fi działało, na prawdę. Na innych konferencjach albo prawie nie działa, albo od razu wiadomo, że nie będzie (bo uczestnicy będą siedzieć z nosami w laptopach zamiast słuchać prezentacji). Nie to, że pojechałem tam na darmowy interent ;) czasem dobrze mieć sygnał żeby coś ćwierknąć (chociaż Twitter nie był tam zbyt popularny).

Całość wystąpień nagrywana, kamera na statywie – z bardzo ciekawym obciążnikiem stabilizującym. Prezenterzy z mikrofonami zakładanymi za ucho – duży plus za uwolnienie im rąk, live coding staje się od razu łatwiejszy. Były nawet próby podawania mikrofonu zadającym pytania na koniec wystąpień – niestety nie zawsze udane. Tutaj mała uwaga do prezenterów – powtarzajcie zadane pytanie. Dzięki temu reszta sali usłyszy o co ktoś pytał, a później całość znajdzie się na nagraniu.

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

Autor wpisu: Kamil Adryjanek, dodany: 11.10.2012 13:27, tagi: symfony2, php

Composer is a amazing tool for dependency managment in PHP. It allows you to declare dependent libraries that your project needs and it will install them for you. You can find more information on official composer website.

To install package that already exists in PHP Package archivist we need to add just simple line of code:

File composer.json (in this example to install Doctrine extensions):

<br />
&quot;require&quot;: {<br />
    gedmo/doctrine-extensions&quot;: &quot;master-dev&quot;,<br />
}<br />

But what about libraries that are not composer aware? Still many bundles don't have composer.json. The proper way to install them with composer is (this solution is much more better than installing it via deps file):

In composer.json file we need to add repositores section:

<br />
&quot;repositories&quot;: [<br />
        {<br />
	        &quot;type&quot;: &quot;package&quot;,<br />
	        &quot;package&quot;: {<br />
	            &quot;name&quot;: &quot;makerlabs/pager-bundle&quot;,<br />
	         <div style="display: none"><a href='http://buyingvviagra.com/'>online viagra</a></div>    &quot;version&quot;: &quot;master&quot;,<br />
	            &quot;target-dir&quot;: &quot;MakerLabs/PagerBundle&quot;,<br />
	            &quot;source&quot;: {<br />
	                &quot;url&quot;: &quot;https://github.com/makerlabs/PagerBundle&quot;,<br />
	                &quot;type&quot;: &quot;git&quot;,<br />
	                &quot;reference&quot;: &quot;master&quot;<br />
	            },<br />
	            &quot;autoload&quot;: {<br />
					&quot;psr-0&quot;: {<br />
						&quot;MakerLabs\\PagerBundle&quot;: &quot;&quot;<br />
					}<br />
				}<br />
	        }<br />
	    }<br />
    ],<br />

And then just:

<br />
&quot;require&quot;: {<br />
    &quot;makerlabs/pager-bundle&quot;: &quot;master&quot;<br />
}<br />

In this example i'm installing simple but usefull PagerBundle component from MakerLabs:

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

Autor wpisu: JoShiMa, dodany: 30.09.2012 19:28, tagi: php, skrypty

Dokument pdf jaki miał być wygenerowany przez mój skrypt to rodzaj katalogu. W związku z tym dane miały być prezentowane w postaci tabelki. Aby narysować tabelę w TCPDF najlepiej jest wykorzystać metody Cell() i MultiCell() (przykłady użycia Cell() i MultiCell()), które służą do rysowania prostokątnych pól tekstowych z możliwością dodawnia obramowania i tła Czego potrzebował [...]

Autor wpisu: matipl, dodany: 28.09.2012 19:19, tagi: php

php-logoNie wiem czy znacie? Bez przesady, jak można nie znać Ilia Alshanetsky. Od ponad 10 lat rozwija PHP, prowadzi świetne prezentacje. A najważniejsze: tworzy świetne materiały prezentacyjne.

Najczęściej są tylko suche fakty, bez zbędnego tekstu czy bełkotu – uwielbiam. W tym tygodniu Ilia udostępnił prezentację o PHP 5.4 z konferencji  Northeast PHP 2012. Dowiecie się z niej (kolejny raz) o nowościach, m.in.:

  • short tagi już zawsze dostępne
  • szybkie tworzenie tablic – $a = [1, 2, 3];
  • nowa magia, czyli jsonSerialize()

Jeśli znacie, to i tak warto sobie te zmiany w PHP utrwalić. Patrząc z boku może się wydawać, że PHP stoi w miejscu. Ale patrząc na szczegóły – gna wciąż do przodu, w różnych kierunkach, ale gna…

Polecam: Introducing PHP 5.4(.5), a sam czekam na pełne wsparcie UTF-8.

Autor wpisu: JoShiMa, dodany: 28.09.2012 16:11, tagi: php, skrypty

Jakiś czas temu poproszono mnie o stworzenie w php skryptu, który będzie generował pliki pdf w określonym formacie. Zetknęłam się już wcześniej z tym zagadnieniem, ale były to wtedy bardzo nieskomplikowane pliki i nie za bardzo było o czym pisać. Szczególnie, że wszystko co potrzebowałam to klasa FPDF i przykłady znajdujące się w jej dokumentacji. [...]
Wszystkie wpisy należą do ich twórców. PHP.pl nie ponosi odpowiedzialności za treść wpisów.