Niezalogowany [ logowanie ]
Subskrybuj kanał ATOM Kanał ATOM

Autor wpisu: widmogrod, dodany: 20.11.2011 21:05, tagi: php, technologie

Okładka magazynu Imagine z moim artykułem Zend Framework 2 na Horyzoncie

Pod powyższym tytułem został opublikowany artykuł w najnowszym magazynie Imagine. Magazyn jest wydawany przez Empathy i można się z nim zapoznać całkowicie za darmo online: http://issuu.com/imaginemagazine/docs/imagine_no2

Artykuł powstał dwa miesiące temu, ale z dzisiejszego punktu widzenia mogę powiedzieć że kierunek rozwoju Zend Framework 2 trzyma się planu. Zagłębiając się bardziej w jego temacie napisałem pierwszą aplikację na FB właśnie przy użyciu ZD2 i Doctrine2. Mogę powiedzieć że z punktu widzenia programisty jest dużo nowych rzeczy do nauki. ZF2 zmienia sposób pisania aplikacji internetowych. Ale na ten temat na pewno jeszcze napiszę jeszcze kilka słów :)

Jako że w magazynie artykuł ukazał się w wersji skróconej, umieszczam go poniżej w pełnej wersji. Życzę smacznego!

Wstęp

Deweloperzy pracujący nad rozwojem framework’a postawili duży nacisk na to by produkt, który tworzą, był bardziej spójny, dobrze udokumentowany, zwiększający produktywność i szybkość uruchamiania aplikacji. Artykuł opisuje dlaczego i w jaki sposób developerzy chcą zrealizować postawione przez siebie cele. Do pełnego zrozumienia będzie potrzebna podstawowa znajomość pierwszej wersji Zend Framework, wzorców projektowych i PHP 5.3.

Prosty i szybki proces nauki

Pierwszy krok jest najtrudniejszy, to stwierdzenie, dokładnie oddaje najczęściej napotykany problem, przez rozpoczynających przygodę z pierwszą wersją framework’a, programistów. Pomimo dobrej dokumentacji i dopracowania rozdziału „Quick Start”, programista napotyka na dodatkowe problemy związane z rozwojem aplikacji:

  • Spójność. Dokumentacja opisuje jak korzystać z poszczególnych komponentów takich jak Zend_Cache, Zend_Translate, Zend_Form, itd. ale brakuje kompletnego przykładu, pokazującego jak połączyć istniejące komponenty, w bardziej złożonej i dynamicznie rozszerzanej o nowe funkcjonalności aplikacji.

  • Niekonsekwencja API. Pierwsza wersja framework’a zawiera hepler’y, plugin’y i filtry, niektóre z nich posiadają spójny interfejs a pozostałe już nie. Cześć z nich posiada niejawne metody tworzone poprzez __call(), które trudniej jest znaleźć w kodzie. Część z komponentów pozwala na konfigurację poprzez przekazanie array lub obiektu Zend_Config natomiast pozostałe wyłącznie array. Niektóre komponenty pozwalają na konfigurację camelCaseOption natomiast inne na underscore_separated.

Rozwiązanie, które deweloperzy zaproponowali jako remedium na powyższe problemy można przedstawić w kilku zwięzłych punktach:

Autor wpisu: Tomasz Kowalczyk, dodany: 20.11.2011 19:22, tagi: javascript, php

Już za niecałe dwa tygodnie na polskiej scenie programistycznej pojawi się kolejne interesujące wydarzenie - spotkanie CodeRetreat, edycja 2011. Ze względu na to, że zamierzam się tam pojawić, zapraszam Was do lektury tego krótkiego wpisu wprowadzającego. Mam nadzieję, że uda mi się Was zachęcić do udziału w nim. :)     Fotografia: coderetreat-warsaw.heroku.com. CodeRetreat 2011: [...]

Autor wpisu: Tomasz Kowalczyk, dodany: 20.11.2011 18:42, tagi: css

Zapraszam na kolejną edycję "różnych różności" związanych z najnowszą wersją kaskaderskich kuszy stylizacji. :)         Linkdump: CSS3:CSS 3:1 na wyjeździe. CSS3 Buttons – 10+ Awesome Ready-To-Use Solutions (+All Related Tutorials You Need). Całkiem spory zbiór przycisków. CSS3 vs Internet Explorer 6+. Kompendium wiedzy nt. tego, jak "zrobić CSS3" w przeglądarkach go nieobsługujących. [...]

Autor wpisu: Tomasz Kowalczyk, dodany: 20.11.2011 18:24, tagi: symfony

Routing w symfony 1.x jest rozwiązany w całkiem przyjemny sposób, jednak jak to zwykle bywa, kiedy próbujemy zrobić coś wbrew ustalonej konwencji, framework szybko sprowadza nas na "jedyną prawdziwą ścieżkę zen tworzenia aplikacji". W dzisiejszym wpisie chciałbym przedstawić jeden z problemów, na jakie m0żemy trafić podczas zabawy z wspomnianym mechanizmem tytułowego frameworka. Fotografia: filipw @ [...]

Autor wpisu: Tomasz Kowalczyk, dodany: 14.11.2011 22:58, tagi: jquery

W serii Linkdump dawno nie podejmowałem już tematyki silnika blogowego, którego sam używam - WordPressa. Naprawiając ten błąd zapraszam Was na kolejną porcję linków z nim związanych.       Fotografia: m.schuckart @ Fotolia. Linkdump #62: WordPress. Dodatkowe pola w formularzu komentarzy WordPress. Jak w tytule. :) Add a jQuery UI Accordion Widget Area to [...]

Autor wpisu: Kamil Adryjanek, dodany: 13.11.2011 02:04, tagi: symfony2, php

In one of my templates i needed a simple way to get controller / action name to generate some dynamic urls. Symfony2 does not offer any Twig helper function to display current controller / action name.

The easiest way that i have found so far is to create Twig extension. In our default bundle we need to create folder Twig/Extension for example Acme/PageBundle/Twig/Extension and place there our Twig extension class:


<?php 
// src/Acme/PageBundle/Twig/Extension/AcmePageExtension.php

namespace Acme\PageBundle\Twig\Extension;

use Symfony\Component\HttpFoundation\Request;


class AcmePageExtension extends \Twig_Extension
{
	protected $request;
	/**
	 *
	 * @var \Twig_Environment
	 */
	protected $environment;
	
	public function __construct(Request $request)
	{
		$this->request = $request;
	}
	
	public function initRuntime(\Twig_Environment $environment)
	{
		$this->environment = $environment;
	}
	
	public function getFunctions()
	{
		return array(
	            'get_controller_name' => new \Twig_Function_Method($this, 'getControllerName'),
	            'get_action_name' => new \Twig_Function_Method($this, 'getActionName'),
		);
	}
	
	/**
	 * Get current controller name
	 */
	public function getControllerName()
	{
		$pattern = "#Controller\\\([a-zA-Z]*)Controller#";
		$matches = array();
		preg_match($pattern, $this->request->get('_controller'), $matches);
		
		return strtolower($matches[1]);
	}
	
	/**
	 * Get current action name 
	 */
	public function getActionName()
	{
		$pattern = "#::([a-zA-Z]*)Action#";
		$matches = array();
		preg_match($pattern, $this->request->get('_controller'), $matches);
	
		return $matches[1];
	}
	
	public function getName()
	{
		return 'acme_page';
	}
}

Next step is to register this service:

// src/Acme/PageBundle/Resources/config/services.yml
    request:
        class:        Symfony\Component\HttpFoundation\Reques
        
    acme.twig.extension:
        class: Acme\PageBundle\Twig\Extension\AcmePageExtension
        arguments:  [@request]
        tags:
            - { name: 'twig.extension' }

and then in twig templates we can simply call:


Controller name: {{ get_controller_name() }}
Action name: {{ get_action_name() }}

Autor wpisu: Tomasz Kowalczyk, dodany: 11.11.2011 20:10, tagi: symfony2, doctrine, symfony

Hello everyone! As I am more and more into Symfony2 you can expect a little more about this framework from me. I've already added Symfony2 category on this blog, but there is only one entry, so now I'll try to fix this a little bit. Today I would like to show you an interesting improvement [...]
Wszystkie wpisy należą do ich twórców. PHP.pl nie ponosi odpowiedzialności za treść wpisów.