Symfony2: A Simple Hello World

18/03/2015 0 symfony, розробка, інструкція

Кожен із наведених компонентів можна використовувати як у складі Symfony2, так і самостійно у будь-якому РНР-проекті.

У попередньому записі в блозі ми розповідали, звідки завантажити і як встановити Symfony. Тепер ви готові до того, щоб справді почати роботу з фреймворком. Отож, будемо вчитись писати найпростіший веб-додаток на Symfony.

Стандартна збірка Symfony2 включає в себе дуже багато компонентів, зв’язок і концепцій, які можуть заплутати новачка і збити його з пантелику.

1) YAML;

2) Twig;

3) Injection Container’и для залежностей і середовищ;

4) Різні дивовижні і не до кінця зрозумілі синтакси для бандлів, _контроллерів і назви шаблонів;

5) Купа різних файлів, які можна повідкривати і вивчати;

6) Composer;

7) А може й Doctrine.

Це досить важко зрозуміти недосвідченому користувачу. Тому для початку краще використовувати якнайменше цих компонентів, і поступово вивчати нові. Так з часом можна дійти і до комплектації базової збіркию, уникнувши багатьох труднощів.

Почнемо з найпростішого контроллера Hello World. Виглядати він буде так:

<?php

namespace Acme\TrainingBundle\Controller;

use Symfony\Component\HttpFoundation\Response;

class HelloController
{
    public function helloAction
    {
       return new Response('Hello Word!');
    }
}

Так які конкретно компоненти необхідні для того, щоб “склеїти” цей код і зробити його працездатним? По-перше, index файл web/index.php:

<?php

require_once__DIR__. "/../vendor/autoload.php":
require_once __DIR . "/../app/AppKernel.php":

use Symfony\Component\HttpFoudation\Request:
    
$request = Request: :createFromGlobals():
$kernel = new AppKernal('dev'. true):
$kernel ->handle($request)->send():

Тут ми використовуємо Composer i клас AppKernel. Так це виглядає:

{
    "require": {
        "symfony/symfony": "@stable"
    }.
    "autoload": {
        "psr-0": { "Acme": "src/"
    }
}

Файл composer.json завантажує і встановлює найсвіжіший стабільний реліз Symfony і включає автоматичне оновлення для всіх файлів у папці src, назва яких починається з Acme.

Визначаємо Kernel нашого додатку в app/AppKernel.php. В стислому вигляді це буде мати такий вигляд:

<?php

use Symfony\Component-HttKernel\Kernell;
use Symfony\Component\Config\Loader\LoaderInterface;

class AppKernel extends Kernel
{
    public function registerBundles()
    {
        
        return array(
            new Symfony\Bundle\FrameworkBundler().
            new Symfony-bundle\TwigBundle().
            
        );
    }
    
    public function registerContainerConfiguration(LoaderInterface $loader)
    {
        
        $loader->load(function ($container) {
            $container->loadFormExtansion('framework'. array(
                'secret' => 'some secret here'.
                'router' => array(
                    'resource' => '%kernel.root_dir%/config/routing.yml'
                ).
                'templating' => array('engines' => array ('twig'))
            
            ));
        
        });
        
    }
}

Для цього можна використовувати один файл config.yml, але це не обов’язково у випадку, якщо ви використовуєте ClosureLoader. Але компонент маршрутизації не має такого loader’a, тому ви не зможете відмовитись від використання YAML з перших хвилин роботи з Symfony2. Посилаємось на файл app/config/routing.yml:

hello:
  pattern: /
  defualts:
    _controller:"Acme\TrainingBundle\Controller\HelloController::helloAction"

До речі, ви можете визначати контроллери Symfony за допомогою статичного callback синтаксису. В цього підходу є деякі недоліки, якщо розглядати його з позиції наслідуваності бандлів. Але новачкам ще рано морочити собі цим голову і приділяти забагато уваги зв’язці “AcmeTrainingBundle:Hello:hello”.

Але у цьому простенькому файлі маршрутизації є ще кілька підводних каменів, які треба оминути:

- У YAML заборонено використовувати вкладки (багато новачків “ловляться” на цьому);

- незрозуміло, скільки пропусків ставити — 2 чи 4;

- що за чарівна кнопка _controller?;

- тут теж варто уникати такого синтаксису YAML, як {}. Це може спричинити більше непорозумінь, ніж користі.


Тепер запускаємо цей додаток за допомогою вбудованого веб-сервера:

$ php -$ localhost:8000 web/index.php

 

Hello World!


Далі створюємо найпростіший twig шаблон для виводу вашого Hello World. Краще уникати ще однієї заплутаної зв’язки на самому початку (йдеться про синтаксис шаблону AcmeTrainingBundle:Hello:hello.html.twig). Для цього скористаємось папкою apps/Resources/views/ — вона вже за замовчуванням зареєстрована в бандлі Twig. Тепер просто створюємо шаблон app/Resources/views/hello.html.twig і редагуємо там контроллер:

<?php

namespace Acme\TrainingBundle\Controller;

use Symfony\Component\HttpFoundation\Response;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;

class HelloController extends Controller
{
    
    public function helloaction()
    {
        return $this->render('hello.html.twig');
    }
}

В результаті маємо 5 файлів (якщо враховувати шаблон, то 6). Зверніть увагу: ми ще не створювали бандл AcmeWorkshopBundle, бо для цього прикладу зі статичним функціоналом нам він не потрібен.

І ось у нас є простий приклад додатка на Symfony. Для початку зовсім непогано. А далі ви навчитеся використовувати більш складний функціонал і створювати серйозніші додатки.

 

Поділитися