
Кожен із наведених компонентів можна використовувати як у складі 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. Для початку зовсім непогано. А далі ви навчитеся використовувати більш складний функціонал і створювати серйозніші додатки.