Открыть список
Как стать автором
Обновить

Комментарии 74

Ваша статья офигительна.

Но — можно оффтопик? У меня создалось такое количество блогов, написанных в результате изучения фрэймворков, что я не успеваю в них ничего писать.

Что с этим делать? Можно ли оформить их как плагины к Symfony? ;)
Hello, World — это не модно. Сейчас пишут Hello, Blog!

В плагины, конечно, можно оформить :)
Будет время на выходных — напишу статью «создание графического редактора на Django».
А про поиск для новой ветки написать можете?
ахахаххахаха )))))))) тонкий юмор над пхп-шниками)
а в чем собственно юмор?
НЛО прилетело и опубликовало эту надпись здесь
Супер! Сам как раз сейчас изучаю фреймворк, пишу на нем один проектик. Столкнулся с тем, что очень тяжело начать. надеюсь с помощью вашей следующей статьи получится все быстрее и лучше) То, что описано в этой я уже успел осилить самостоятельно)
Можете на пальцах объяснить, почему? Возможно, я сделал неправильный выбор в пользу Propel
По слухам Doctrine самый продвинутый ORM на PHP. ИМХО: немного пользовался и тем и другим, доктрина круче. )
Работал с обеими фреймворками. Основное впечатление: Doctrine гораздо лучше, более логичен и функционален. Вот только блин, чего сильно не хватает, так это аналога sfPropelAlternativeSchema для Doctrine
Тег «symfony 1.2», а у Вас 1.1.4 в примере…
Вы наблюдательны! Скриншоты сделаны с симфонии 1.1.4, а урок взят из документации к 1.2. Хочется сказать, Мопед не мой, но наверное, скриншоты для следующего урока буду делать со своего браузера. Спасибо
Symfony — очень хороший и продуманный Фрэймворк с большой буквы. Уже 9 месяцев вместе и он с каждым днём всё лучше и лучше!

Тем кто ещё не определился на чём работать — очень советую обратить взляд.
Под какими нагрузками работает?
Тоже интересен этот вопрос.
как и php. Вобщем-то всё решает кэширование и балансировка нагрузки.
Разработчикам встроенного механизма кэширования в sf нужно аплодировать стоя! ;)
Как обстоят дела с производительностью на виртуальном хостинге, не в курсе?
нормально, под рбк хостится, конечно после очистки кэша первый реквест выполняется долго (вплоть иногда до таймаута) а дальше нормально
Виртуальный хостинг не айс. Даже не потому, что symfony на нём плохо работает ( это я не утверждаю ) — просто для лучшей производительности нужна ещё куча софта, которым на таких хостах обычно и не пахнет — nginx, APC, например.
работает и не жалуется. правда деплоить изменения геморно без rsync.
Определенно стоит перевести и 2ю часть; )
Замечательная альтернатива Rails ;) Но код… после рельсов мягко говоря отпугивает… Здесь, наверное, тоже на MVC обычно раскидывают — иначе не разобраться в коде. И теперь я наконец-то понимаю, почему в Rails так восхищаются REST
Да, стоит заметить, конечно, что с PHP я практически не связывался
не спорю, что ruby более приятен чем php. Но если откинуть в сторону различия в синтаксисе языков, то оба фреймворка имеют много общего.
Тоже не спорю — уверен, что профессиональным PHP-программистам проще и удобнее использовать symfony. Хотя… Руби совсем несложен, зато потом сколько радости ;)

Одним из крупных преимуществ symfony считаю отсутствие проблем с shared хостингом. В рунете с RoR тяжело…
Правда симфони-разработчики об этом не знают и пишут, что фреймворк их не расчитан на shared хостинг)))
Кстати при написании symfony очень много взято и ruby, prada, и др фремворков, попытались сделать сборную солянку и взять наиболее интересные реализации.
Думаю что неплохо получилось.
Фреймворки, конечно — хорошо, но гораздо интереснее писать код самому!
Это увлекательно и интересно!
после 2-3 раза писать одно и то же становится необычайно влом. ТОгда или пишут свой фреймворк, или берут существующий
Возможно, но все равно — весь кайф в программировании заключается в создании собственного кода.
Это как родить ребенка, лучше когда он свой, а не чужой :)
Так интереснее жить!

А с тотальным распространением фреймворком мы катимся к тому, что через пару лет не будет программистов, а будет какая-нить софтинка для какого нить менеджера. Он в ней ставит тока галочки (импортировать блог, каталог, укажите требуемое кол-во полей и т.п.). И все прога сама сгенерит и подключит нужное…

Эх, а где романтика, где эти короткие темные ночи
Софтинка сама собой появится? ;)
Ее напишет 1 программист,
тем самым «убив» много миллионов программистов.
Убив? Что вы под этим понимаете?
Ну вот смотрите,
что дает symphony?
Он дает предопределенную логику и инструменты, он выполняет низкоуровневые операции…
Сейчас программист определеяет набор данных, называет методы, выполняет команды по сборке проекта, всякие управляющие команды (symfony propel:build-model).

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

Таким образом, отпадает необходимость в высоко квалифицированнх программистах.
вам что занятся нечем? У меня есть НАСТОЛЬКО большое количество идей сделать то чего ЕЩЁ НЕТ, что о том чтобы не пользоваться существующими веб-фреймворками даже и речи-то нет +).
Каждый раз писать, к примеру, функции санитизации GET/POST/данных для вставки в БД и пр.?
Да вы, батенька, затейник :)
у нас был один такой проект.
помню, создание любой новой сущности в БД начиналось с копипастанья около пяти объемных файлов.
написано это было настолько замечательно, что рефакторить было бессмысленно.
Согласен, но со временем все равно появляются какие-то куски кода, которыми начинаешь пользоваться постоянно, модернизируя по ходу… А это уже ни что иное, как свой, маленький фреймворк :)

С фреймворками разработка продвигается намного быстрее, ИМХО.
А каким образом тебе в этом мешает фрэймворк?
>>Фреймворки, конечно — хорошо, но гораздо интереснее писать код самому!
>>Это увлекательно и интересно!

Ух ты — мне поставили -2.
Это значит, что тут куча идиотов, а не программистов
Не надо, не надо — мне +3 поставили — здесь все хорошие :))
аффтар, напиши про реализацию ACL в symphony, лично мне оно может вскоре пригодиться:)
О, да — так даже интереснее.
Спасибо большое за перевод! Давно хотел начать изучать Симфони, да все руки никак не доходили. Думаю, это послужит стартом ;) Слыхал много положительных отзывов о Симфони, и как ни странно, не слышал ни одного негативного. Хотя нет, слышал пару негативных отзывов по поводу того, что нет хорошей документации на русском, но это не относится непосредственно к самому фреймворку. :)

С нетерпением буду ждать следующих переводов :)

З.Ы. Английский знаю на среднем уровне, и не всегда все понимаю дословно, только в общих чертах :(
Думаю будет полезно не просто переводить пост, а добавлять в него русской специфики:
— все надписи — на русском,
— кодировку можно тоже использовать например cp1251, чтобы по-полной черпнуть локальной специфики.
Так же, при работе с формами стоит обратить внимание на маркировку с помощью * обязательных полей. На то, чтобы slug формирвоать с помощью транслитерации, ну и так дале…

насчет cp1251 спорно.
А кроме блогов на этих фреймфорках можно чтото написать?
Все, что угодно :) Как? Умом и руками :)
как-то мне довелось работать с одним проектом на symfony. необходимо было добавить несколько полей к существующей формочке и я поправил файл, описывающий модель, но затем исполнять команду «php symfony propel:build-model» побоялся, т.к. мне нужно было всего лишь обновить структуру базы и я не знал что с ней произойдёт если исполнить эту команду, как она отработает, что будет с данными?

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

то есть я задаю один вопрос: как обновить структуру базы после изменения описания модели?
Предполагается, что на этапе разработки вы будете пересоздавать БД после каждого чиха (читай, изменения схемы). Посмотрите, что генерирует symfony {propel|doctrine}:build-sql. Далее, бояться пускать propel-build-model не стоит — оно ничего, что написали вы, не потрёт — т.к. генератор перестраивает только файлы Base*.php.
Если вы хотите править структуру БД «по-живому», рекомендую перебраться на Doctrine — там есть поддержка миграций; или же использовать менее функциональный sfPropelMigrationsLightPlugin. Поддержка миграций самим sfPropelPlugin грядет неизвестно когда. Хотя соответствующая ветка в репозитории symfony присутствует и работа ведётся.
Вау, хорошо написана.
Да, стоит переводить.
Все не было времени познакомиться с симфони.
а теперь вы дали отличный толчек для старта :)
Очень нравится Symfony, но сильно раздражают его стандарты кодирования и YAML (XML использовать религия не позволяет).
YAML гораздо быстрее чем XML. Учитывая общую тормознутость PHP, в котором даже нормального ООП-то не попишешь по причине тормознутости, и кэшировать приходится каждый чих — YAML это настоящая находка.
Точно так же как для аякса лучше использовать JSON.
XML рулит в других местах, типа Жавы, ящитаю.
Всё это верно, но в Симфонии YAML ИМХО используется только при подготовке проекта
А куда потом пропадают database.yml, view.yml, app.yml и settings.yml и остальные .yml файлы?
Никуда, на их основе строится модель
Мммм, нет :)
Модель строится на основе schema.yml (кстати можно и schema.xml), а перечисленные мной файлы никуда не пропадают.
Вот я чайник в симфонии. Стал всё делать по статье и на шаге, где добавление коммента делается по ссылке из поста получаю sfError404Exception Object blog_comment does not exist (). :( Не подскажете, в чём может быть дело? В симфонии 1.2? :)
Ошибка не потому, что вы чайник в Симфонии, а потому что в оригинальной статье целых 3 ошибки в одном месте. Когда мы привязываем комментарий к посту, мы сначала выводим ссылку

<?php echo link_to('Add a comment', 'comment/edit?post_id='.$blog_post->getId()) ?>

Тут мы видим первые две ошибки:
1. поскольку мы Добавляем, а не Редактируем комментарий, надо вместо edit написать new.
2. Параметр ID поста должен быть не post_id, а blog_post_id

Ну и третья ошибка — это собственно создание hidden-поля со значением, взятым из $_GET['blog_post_id'], которое мы передаем по упомянутой ссылке. Я еще не вполне знаком с культурой Симфонии, и не могу точно сказать, что предложенное решение верное, но я сделал так: в файле apps/frontend/modules/comments/actions/action.class.php в экшене executeNew я добавил следующую строку:

    $this->form->bind(array("blog_post_id"=>$request->getParameter('blog_post_id')));    

которая добавляет в форму одно поле, взяв значение из $_REQUEST['blog_post_id'].

Теперь вопрос к знатокам Симфонии: как это сделать правильно?

P.S. Получается, вы — единственный, из прочитавших пост, кто сделал этот туториал?..
Просто давно собирался разобраться с симфонией, да всё руки не доходили.
Я, в общем-то, так и предполагал, что там ошибка, но как её исправить не докумекал.
Обязательно попробую ваше решение, спасибо.
Вот еще один вариант решения:
В методе executeNew() модуля comment пишем вместо

$this->form = new BlogCommentForm();

следующее:

    $comment=new BlogComment();
    $comment->setBlogPostId($request->getParameter('blog_post_id'));
    $this->form = new BlogCommentForm($comment);


(спасибо bitingm@n за подсказку).
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.