Структура веб-приложений

  • PHP
  • 2 года назад

Одна из постоянных задач, с которой я сталкиваюсь в роли веб-разработчика, это какую архитектуру выбрать для моего приложения. Я считаю, что на эту проблему стоит потратить немало времени. Мне понравились идеи, которые изложил Kris Wallsmith на SymfonyCon. Конечно, я не разделяю его мнения полностью, но его речь вдохновляет, да и всегда интересно заглянуть за кулисы и понять других разработчиков.

Читать далее...

Применение кеширования Doctrine DBAL в Symfony2

  • PHP
  • 2 года назад

В Symfony2 DoctrineBundle отвечает за внедрение и настройку Doctrine, включая DBAL. Но этот бандл пока не поддерживает настройку кеширования DBAL (но поддерживает его для ORM части Doctrine).

Для начала вам потребуется создать CompilerPass внутри своего бандла. Он будет отвечать за выгрузку службы dbal и добавления необходимых настроек для поддержки кеширования.

<?php
// src/Acme/HelloBundle/DependencyInjection/Compiler/AddDbalCacheConfigurationPass.php

namespace Acme\HelloBundle\DependencyInjection\Compiler;

use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Reference;

class AddDbalCacheConfigurationPass implements CompilerPassInterface
{
    public function process(ContainerBuilder $container)
    {
        $id = 'doctrine.dbal.default_connection.configuration';

        if ($container->hasDefinition($id)) {
            $container
                ->getDefinition($id)
                    ->addMethodCall('setResultCacheImpl', array(new Reference('doctrine.orm.default_result_cache')))
            ;
        }
    }
}
Читать далее...

Новый установщик Symfony: самый быстрый способ начать работу с Symfony

  • PHP
  • 2 года назад

Совсем недавно команда Symfony презентовала установщик для своего фреймворка. Основная задача которого - упростить процесс установки Symfony.

До настоящего времени установка Symfony подразумевала несколько шагов:

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

Читать далее...

Повышение безопасности и упрощение разработки в Symfony2 при помощи аннотаций и фильтров Доктрины

  • PHP
  • 2 года назад

Как вы и сами прекрасно понимаете, пользователь должен видеть только свои заказы, свои сообщения и так далее, и ни в коем случае не чужие. Но, конечно, иногда пропустив условие выборки данных, например, забыв указать WHERE в ParamConverter, мы нарушаем это правило.

Я покажу вам как можно легко избавиться от подобного рода проблем не только на определенных запросах и таблицах, а в пределах всего Symfony приложения. И в этом нам помогут аннотации и фильтры Доктрины.

Читать далее...

Обзор компонентов Symfony2 : Применение преобразователя данных

  • PHP
  • 2 года назад
  • 5/6

Довольно часто нам приходится сталкиваться с ситуацией, когда введенные пользователям данные необходимо привести к какому либо другому виду. Конечно можно вручную преобразовать их в контроллере. А что если эти данные вам понадобятся в еще одной форме в другом месте в приложении?

Допустим вы используете связь один к одному между сущностями Task (задача) и Issue (проблема), т.е. задача может иметь проблему, а может и не иметь. Если вы просто добавите выпадающий список с полным набором возможных проблем, то отыскать в нем нужную вам будет практически невозможно. А можете создать текстовое поле, в которое пользователь будет вводить номер проблемы.

Читать далее...

Обзор компонентов Symfony2 : Авторизация

  • PHP
  • 2 года назад
  • 4/6

В случае если любой из провайдеров аутентификации (см. Провайдеры аутентификации) подтвердит непроверенный токен, то будет возвращен аутентифицированный токен. Аутентификационный подписчик должен напрямую установить этот токен в TokenStorageInterface при помощи метода [setToken()](http://api.symfony.com/2.6/Symfony/Component/Security/Core/Authentication/Token/Storage/TokenStorageInterface.html#setToken()).

После этого пользователь считается аутентифицированным, то есть идентифицированным. Теперь в любой части приложения вы можете использовать этот токен для определения доступен ли определенный URL пользователю или может ли он изменять определенный объект. Само решение о праве доступа принимается экземпляром AccessDecisionManagerInterface.

Читать далее...

Что нового в Symfony 2.7: Twig в роли полноправной составляющей фреймворка

  • PHP
  • 2 года назад

Когда я (далее Я заменяйте на Fabien Potencier) начинал работать над Symfony2, twig не существовал вовсе. Поэтому для упрощения работы с PHP я создал Symfony Templating Engine.

Позднее, осознав все неудобства работы с PHP в качестве шаблонизатора, я решил написать свой язык для шаблонов, а именно - Twig, в основу которого я взял язык Jinja2 из Python. Таким образом Symfony2 стал первым популярным фреймворком, который использовал шаблонизатор не на PHP. Конечно, тогда я и не мог представить, что Twig станет настолько популярным среди разработчиков Symfony и поэтому я предусмотрел возможность использования в Symfony2 как Twig, так и PHP.

Читать далее...

Использование классов избирателей для проверки прав доступа в Symfony 2

  • PHP
  • 3 года назад

В Symfony права доступа к данным можно проверять используя ACL модуль, но чаще всего его использование является излишним,загромаждающим приложение. Куда удобнее использовать свои созданные правила, больше походящие на простые условия.

Для того, чтобы использовать классы избирателей (Voters), сначала стоит понять как Symfony с ними взаимодействует. Все они просматриваются каждый раз при вызове метода isGranted() службы security.context. Каждое правило либо разрешает, либо запрещает доступ к определенному ресурсу.

Читать далее...