ݺߣ

ݺߣShare a Scribd company logo
Wstęp do
Budowa Symfony
●

Struktura HMVC

●

Aplikacja jako zestaw klocków (Bundle)

●

●

Podstawy HTTP jako wzór komunikacji z
aplikacją
Request → Controller → Response
Przestrzenie nazw:
Tribal/NewsletterBundle
Struktura HMVC
Aplikacja jako zestaw ǻłó
The Symfony Application Flow
Przestrzenie nazw
●

namespace EtudePagesBundleController;
use SymfonyComponentHttpFoundationRequest;
class PageController extends Controller {}

ZAMIAST
require_once(BASE_DIR.’vendor/Symfony/Component/.../Request.php’);
●

Pozwala używać tej samej nazwy klasy w obrębie różnych przestrzeni nazw:
use SymfonyComponentHttpFoundationRequest;
use EtudePagesBundleCoreRequest as PageRequest;
Dependency Injection
●

●

●

public SomeClass (MyClass $myObject) {
$this->myObject = $myObject;
}
ZAMIAST
public SomeClass() {
$myObject = new MyClass();
$myObject->param1 = „value1”
}
Architektura Bundle’a
●

Struktura folderów

●

Controller i Routing

●

View i Twig

●

Model i Doctrine
Struktura folderów
●

Controller

●

DependencyInjection

●

Entity

●

Form

●

Resources
–
–

public

–
●

config
views

Tests
Controller
namespace EtudePagesBundleController;
use SymfonyBundleFrameworkBundleControllerController;
class DefaultController extends Controller
{
public function indexAction()
{
return new Response('Index', 200,
array('Content-Type' => 'text/plain'));
}
public function viewAction($uri)
{
return $this->render('EtudePagesBundle:Default:index.html.twig',
array('name' => $uri));
}
}
Routing
●

YML
pages_show:
pattern: /show/{id}
defaults: { _controller: "EtudePagesBundle:Page:show" }

●

Annotations
/**
* @Route("/hello/{name}", name="_demo_hello")
* @Template()
*/
public function helloAction($name)
{
return array('name' => $name);
}
Routing
●

●

●

Pozostałe: XML, PHP
YML:
+ deklaracja w jednym miejscu
+ dobre rozwiązanie dla internacjonalizacji
- wymaga minimalnie więcej czasu
Anotacje
+ w tym samym miejscu co kontroler
+ piszesz adres zaraz obok metody
- potrzeba ingerencji w kontroler w celu zmiany adresu
- i tak musisz podać definicję w pliku yml
Views i Twig
Model i Doctrine
Symfony Workflow
●

Nowy projekt

●

Nowy bundle

●

Nowy model

●

Update bazy

●

CRUD

●

Git Commit
Nowy projekt
●

Pobierz composer
curl -sS https://getcomposer.org/installer | php

●

Stwórz projekt
composer create-project symfony/framework-standard-edition Symfony
Nowy bundle

php app/console
generate:bundle --namespace=Tribal/HelloWorldBundle
Nowy model
php app/console doctrine:generate:entity
Wygeneruj setters/getter
●

(opcjonalnie dla własnego modelu)

php app/console doctrine:generate:entities
Stwórz bazę

php app/console doctrine:database:create
Stwórz tabele

php app/console doctrine:schema:update --force
Wygeneruj controller
●

php app/console doctrine:generate:crud

Lub formularz
●

php app/console doctrine:generate:form
Symfony Best Practices
●

Commituj tylko swój kod (ignoruj gotowe
biblioteki)

●

1 bundle = 1 zadanie

●

Don’t Repeat Yourself

●

YML for routing, Annotations for Doctrine

●

Używaj FormType do generowania formularzy

●

Pisz testy dla swoich pakietów
Dalsza lektura
●

●

●

●

●

Symfony The Book
http://symfony.com/doc/current/book/index.html
Symfony Blog Tutorial
http://tutorial.symblog.co.uk/
Symfony Job List Tutorial
http://www.intelligentbee.com/blog/tag/symfony2-jobeet/
KNP Univeristy Video Tutorials
https://knpuniversity.com/
Symfony 2 Cheat Sheet
http://www.symfony2cheatsheet.com/
Teraz możecie zakuwać

More Related Content

Symfony 2.3 Wstęp do