Первый пост о Symfony2

Около 2х месяцев назад я начал изучать фреймворк Symfony2. Просто хотелось посмотреть что-то новое, разобраться с Doctrine2 и перейти на php 5.3.

В результате получился небольшой учебный проект, на базе которого я планирую наконец доделать портфолио студии.

Начало работы с Symfony2

Для начала работы с Symfony2 советую скачать sandbox и почитать Quick Tour.

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

Доступны два сайта, которые агрегируют информацию о бандлах и проектах на Symfony2. Это http://symfony2bundles.org и http://symfohub.com/bundles.

Конец первого поста о Symfony2

На этом пока все. Удачи 😉

22 thoughts on “Первый пост о Symfony2

  1. І як воно в порівнянні з Zend Framework?
    Symfony сам пробував але проектів не писав тому цікаво як воно на практиці.

    • поки важко сказати. точно скажу, що швидше працює і просить менше пам’яті.

      часу на розробку йде набагато більше. деколи через баги, а інший раз просто не вистачає документації і прикладів. це ще не стейбл.
      також в мене досвіду розробки на ZF значно більше ніж на Symfony2.

  2. А почему именно Symfony2, а не скажем Yii? Yii мне кажется более привлекательным для изучение и возможного перехода, чем Symfony2.

    • да ну. по-моему ты сравнил хрен с пальцем 🙂
      если бы не Symfony2, то я на RoR думал переключиться.

      • Ну Yii сейчас вроде хорошими темпами развивается. И поддержка у него шустрая)

        • я не говорю, что Yii плохой т.к. не могу судить о инструменте который не использовал. наоборот слышал о нем много хороших отзывов.

          но ИМХО весовые категории у Yii и Symfony разные.

  3. в документации: github.com/stfalcon/portfolio/blob/master/README.md
    написано – bin/vendors.sh
    по факту там bin/vendors.php, а в нем еще и ошибка в 22 строке, лишняя кавычка
    system(‘rm -rf ‘ . $vendorDir’);

    а под конец инсталяции вывалилась ошибка
    PHP Fatal error: Class ‘Stfalcon\Bundle\BlogBundle\StfalconBlogBundle’ not found in /var/www/portfolio/app/AppKernel.php on line 46

  4. Тебе спасибо что делишься таким полезным проектом! 🙂
    Включи еще в описание, что после клонирования надо сделать
    git submodule init
    git submodule update

    иначе во время $ php bin/vendors.php все равно получаем ошибку
    PHP Fatal error: Class ‘Stfalcon\Bundle\BlogBundle\StfalconBlogBundle’ not found in /var/www/portfolio/app/AppKernel.php on line 48

    ну и в конце не помешает сделать
    $ app/console doctrine:fixtures:load
    и все работает 🙂

    ну и остается выяснить вопрос с сохнанием рисунков, в модели у тебя такой алгоритм
    public function getPathToUploads()
    {
    return realpath(__DIR__ . ‘/../Resources/public/uploads/projects’);
    }
    что дает путь:
    /var/www/portfolio/src/Application/PortfolioBundle/Resources/public/uploads/projects

    а в скрипте картинка выводится как
    /bundles/portfolio/uploads/projects/4ddaf54c092f5.png

    я сделал
    $ mkdir bundles
    $ cd bundles
    $ ln -fs /var/www/portfolio/src/Application/PortfolioBundle/Resources/public/ portfolio

    картинки показались, но правильно ли это?

    • касательно первой части. я вчера опять немного поменял структуру. буду благодарен если запушишь правки ридми.

      по картинкам. нужно сделать “./app/console assets:install –symlink web” из корня проекта. его запуск прописан в vendors.php, но бандл блога все похерил 🙂

  5. Все таки зря ты на ROR не переключился, я смотрю эту презетацию и думаю до чего же php всетаки не web по сравнению с ruby(Я с zend framework[1,5 года опыта] прыгнул на ROR). Глянь хотя бы скринкасты http://railscasts.com/ и ты поймешь что тебе нужно в 4 раза меньше кода чтобы выразить свои мысли на рельсах. И как вытекающее отсюда в 4-10 раза меньше времени, лучше тестами покрыть за это же время проект. Принципиальное отличие в том что рельсы абстрагируются от задач а не от кода: например тебе надо сделать на сайте регистрацию, конфирмацию, авторизацию, восстановление пароля – пожалуйста 2 команды в консоле и готово, осталось только форму кастомизировать. Надо аплоад картинок? 1 команда с консоли + указываешь как тебе резать типа 300×300>(соблюдая пропорции) 200×200 и готово. Надо вывести каменты рекурсией с цитированием как на хабре – одна строка с консоли 🙂 + есть всякие штуки типа крутых роутов, скоупа, миграций, кеширования, деплоя. Надеюсь я тебя заразил спортивным интересом

    • верю :). я пробую другие языки/фреймворки для саморазвития.

      symfony2 к этому идет.
      FOSUserBundle дает “регистрацию, конфирмацию, авторизацию, восстановление пароля”, а MediaBundle “аплоад картинок”. потом ImagineBundle нарежет как нужно. комментарии тоже реализованы отдельным бандлом и подключаются довольно просто.
      для деплоя я заюзал capifony (расширение capistrano). миграции берет на себя doctrine2.

      php хороший язык. symfony2 и zf хорошие инструменты. нужно просто правильно их использовать.

      • Спасибо, чесно говоря не ожидал что симфони2 так проработан,
        тогда я опишу моменты самого руби как языка
        фича №1. пользователь аплоадит картинку 1600×1200 например надо сделать тумбы например 5 штук разной ширины

        def make_all_thumbs(source)
        // размеры
        sizes = [‘1000′,’1100′,’1200′,’800′,’600’]
        threads = []
        sizes.each do |s|
        // для каждого размера создаю тред и каждый проц режет по отдельности у меня например еще 2 ядра по 2 потока то четыре режется паралельно
        threads << Thread.new(s) {
        create_thumbnail(source+'.png', source+'-'+s+'.png', s)
        }
        end
        end

        Я сам не ожидал того что сервак отдал ответ и браузер нагенерил верстку в то время как тумбы еще продолжали резаться в тредах

        фича №2 scope

        моделька комментариев
        class Comment 1970, :end_year => 2011)
        аналогично для месяца
        select_month(Date.today)

        фича №5
        HAML:
        #profile
        .left.column
        #date= print_date
        #address= current_user.address
        .right.column
        %p = current_user.email
        %p = current_user.bio

        SASS:
        $blue: #3bbfce;
        $margin: 16px;

        .content-navigation {
        border-color: $blue;
        color:
        darken($blue, 9%);
        }

        .border {
        padding: $margin / 2;
        margin: $margin / 2;
        border-color: $blue;
        }

        haml делает чистенькие вьюхи – читать легче
        sass помогает конфигурить css

        фича №6
        Область видимости @variable одинаково пишется и в контроллере и вьюхе и передавать не надо переменная сразу там, + во вьюхе можно запрос к БД сделать
        список всех людей из БД сразу нагенериться в селект

          • согласен. удобно.

            1я фича это конкретная реализация. треды это конечно хорошо. а вобще можно для этого использовать очереди или ресайзить при нужде средствами веб-сервера (модуль для nginx) или скриптами (напр. через ImagineBundle или хелпер в ZF) и не заморачиваться. это если картинок много

            по 5й фиче. haml и sass есть в AsseticBundle
            6ю фичу видел в Django. думаю можно так сделать и в Symfony2 заюзав get_defined_vars().

            2,3 и 4 можно ещё раз? код лучше сразу на pastie.org ложить или в gist

  6. фича №2 scope

    есть моделька https://gist.github.com/1087544 я определяю ей scope теперь во вьюхе могу написать так https://gist.github.com/1087549 , также scope может быть определен для where условий(1-ного или нескольких) + если использовать лямбда функцию можно перевать параметры в него

    фича №3 блягодаря тому что в руби всё объекты вот такие штуки есть
    3.days.ago
    2.weeks.ago
    5.megabytes
    или
    [1..5].each do

    фича №4 формы
    Благодаря тому что формы используются во вьюхе и у них отсутвует даже сам класс формы, а валидация указана в моделе можно делать сложные формы очень легко, не знаю как на симфони но zf это просто жесть как надо было поизвращатся чтобы сделать сложную форму
    + есть вкусности типа http://apidock.com/rails/ActionView/Helpers/DateHelper/select_year

    • понятно.

      значит, что касается 2й фичи, то можно сделать так как писал Кирилл Мокевнин в своей статье http://habrahabr.ru/blogs/zend_framework/98877/

      3я фича это особенность языка, а не фреймворка. я согласен, что в руби есть свои плюсы 🙂

      4я фича. в Symfony2 валидация указана в модели. сложные формы можно делать в вьюхах, а в модель потом ложить данные с запроса.

      • Спасибо, очень конструктивные ответы, можно сказать я мастер класс получил по symfony2 🙂

  7. Привет автору!
    Я тут тоже начал изучать симфони2 но почему то я не понимаю.. Контроллер – понятно, шаблоны – нет проблем, а вот модель, что с моделью? Можно мне в двух словах какой принцип создания модели? Я хотел посмотреть принципы на примере, но еще больше запутался.. так как в бандлах, скачанных с симфони2бандл, очень много папок, тем более разных. Там я нашел и папку моделс но не въехал какой принцип ее создания, все наследуется с entity и с репозитория.. Но куда пихать остальной промежуточный функционал я не понял.. И еще, бандлы, нужно создавать один на проект? Или несколько, например, для работы с юзером ЮзерБандл, с постами ПостБандл?
    Извините за глупые вопросы и спасибо за внимание 🙂 , жду ответа.

Leave a Reply

Your email address will not be published. Required fields are marked *