Подтвердить что ты не робот

Symfony против cakephp

Что такое концептуальная разница между symfony и cakephp?

4b9b3361

Ответ 1

Просто чтобы сбалансировать этот поток, вот почему мне нравится symfony:

  • использует PHP5
  • он запускает некоторые действительно большие сайты, такие как Yahoo! Ответы, вкусные и ежедневные движения.
  • хорошая документация. учебник jobeet на веб-сайте является удивительным. проходит через все функции, и после того, как вы закончите, вы чувствуете, что можете что-либо создать.
  • является очень модульным; многие компоненты symfony работают самостоятельно.
  • позволяет вам выбрать Propel или Doctrine как ваш ORM. Доктрина действительно велика и проста в использовании.
  • вы можете определить свои модели с помощью YAML или PHP, это зависит от вас. Некоторым людям не нравятся файлы конфигурации, и вы действительно можете ограничить их использование, если хотите избегать YAML.
  • обновленный symfony cli (по версии 1.2) является удивительным. Я согласен с abales, перед этой версией это было немного отвратительно, но теперь он очень хорошо документирован и следует предсказуемому формату.
  • Есть много, и я имею в виду много, сходство с ruby ​​на рельсах, за исключением того, что, конечно, PHP не такой симпатичный или гибкий, как Ruby (!). Но, если вы поговорите с разработчиком торта, они, вероятно, скажут обратное:)
  • генератор админов Symfony, который является шагом от CRUD (который также существует в symfony), - это огромная экономия времени. Используя вашу модель данных, она создаст настраиваемые админ-интерфейсы в комплекте со списком (индексом), созданием и редактированием страниц. Это не похоже на базовую груду, где она генерирует источник, и вы входите и изменяете его... Фактически вы можете определить, как выглядит каждое поле, какие поля вы хотите включить, какие дополнительные действия вы можете выполнять для каждого объекта и т.д.

Концептуально, я бы сказал, что разница в этом:

  • CakePHP имеет меньшую кривую обучения. Если вы никогда не использовали структуру MVC, Cake будет легче подобрать и запустить за короткий промежуток времени.
  • Symfony чувствует себя немного "большим", не говоря уже о том, что он медленный, но есть много кода, который позволит вам делать много действительно продвинутых вещей, когда вам нужно.

Лучший совет, который я могу дать, - это быстро попытаться создать свою собственную простую модель данных в обоих, и поэкспериментировать с некоторыми базовыми интерфейсами, и просто посмотреть, что лучше подходит для вашего собственного стиля кодирования. Я думаю, что обе структуры имеют очень активные и страстные сообщества пользователей, и вы не будете сожалеть о своем решении в любом случае.

Ответ 2

  • Философия CakePHP похожа на Ruby on Rails.
  • CakePHP лучше для средних проектов.
  • CakePHP быстрее учится.
  • CakePHP легче, чем symfony.
  • Взаимодействие базы данных CakePHP использует CRUD.
  • CakePHP использует тестовую систему PHPUnit.
  • Интересен в CakePHP Bake и scaffolding.

  • Философия Symfony - это каждая версия отличается.
  • Symfony работает медленнее.
  • Symfony лучше всего подходит для крупных проектов.
  • Взаимодействие с базами данных Symfony использует Doctrine.
  • Symfony использует тестовую систему PHPUnit.
  • Интересен в Symfony Bundles и шаблонах.

Ответ 3

Большая разница в том, как создаются модели: модели CakePHP написаны на PHP, а модели Symphony написаны в YAML и работают на Propel. Подход CakePHP больше похож на ROR ActiveRecord (хотя это не совсем реализация AR). CakePHP, в общем, больше rails-esque.

Документация и инструменты CakePHP, на мой взгляд, имеют более широкую целевую аудиторию, а синтаксис и помощники проще, но у вас еще нет возможности использовать PHP5 в качестве своей исключительной цели (для автоматической загрузки на самом деле не существует). В целом, я предпочитаю подход CakePHP, потому что он соответствует установленному стандарту, и я приветствую его организацию. Я также рекомендовал бы Kohana для него доброту PHP5.

Там другое сообщение о переполнении стека по этому вопросу, хотя его немного отличается в фокусе.


Изменить: я вернул Symfony, чтобы найти причины, по которым я сказал "нет", и придумал их - ваши мнения и пробег могут отличаться:

CakePHP также предлагает мертвые простые леса и легко понятные инструменты CLI. Синтаксис Symphony CLI для меня немного неудобен, а "CRUD" в Symfony просто не то же самое. Объедините это с синтаксисом действия Symfony (awkard) и бросьте на Symfony плохо спроектированный (и сложный для понимания) веб-сайт, а также предпочитайте стороннюю платную документацию (книги на Amazon), и у вас больше тиков в столбце cons.

Ответ 4

Некоторые из претензий относительно CakePHP и ограничений выше просто неверны. Запрос возможен. Вы просто должны знать, как это сделать. "Автоматический" CakePHP СУПЕР хорош, поэтому вы можете ударить по земле, используя FAST. Это БЫСТРАЯ БЫСТРАЯ рамка для развития (отсюда почему она так сильно смоделирована после RoR, которая, очевидно, имела большой успех и жужжание). Существует более совершенное поведение, чтобы получить данные, полученные по-разному, и сделать некоторые из этих более сложных запросов с несколькими короткими вызовами метода и параметрами массива.

Однако. Насколько я могу судить, никакая другая структура не имеет столько "автоматических" методов и классов. Торт принимает самые общие задачи и обеспечивает простой способ сделать это. Если вы действительно умны, вы будете выполнять большую часть своего кодирования на уровне модели и использовать файл app_model и app_controller и иметь чрезвычайно эффективное приложение.

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

Наконец. В то время как документация была отстающей, сейчас это намного лучше, и в то время как Cake также получил некоторые суровые отзывы во время отсутствия документации и периода версии 1.1... Это было ВСЕГО хорошо, просто сильно упущено. С 1.2 и теперь Cake2 и Cake3 на горизонте... Вы увидите много мнений.

Я использовал CakePHP с 1.1. Я твердо верю в это. Я использовал его для огромных корпоративных сайтов. Это получает миллионы и миллионы обращений в день... Мы вышли из сферы таких вещей, как WordPress и Drupal для решений. Когда вы доберетесь до этого уровня для сайта типа CMS, я очень рад, что у него CakePHP. Аналогично, Symfony и CodeIgniter помогут вам в масштабировании. Я не могу сказать ничего плохого ни об одной из этих структур. Я могу только сказать, что вы потратите меньше времени на кодирование и найдете более крупное сообщество (и супер дружественный канал IRC) с CakePHP.

Ответ 5

Я просматриваю и документирую некоторые из моих ответов на вышеупомянутые комментарии о CakePHP, а некоторые из них (в некоторых случаях правильно) воспринимают ошибки.

Большие веб-сайты запускаются с использованием CakePHP, некоторые из них - Mozilla Addons, Scratch by MIT и Hot Scripts. В нижней части сайта CakePHP есть большой список (http://cakephp.org). Независимо от того, любой хороший разработчик должен иметь возможность создавать масштабируемый веб-сайт с использованием рамки, если структура не является полностью глупой (CakePHP не слишком глупый: D).

Верно, что нет ни одного очень хорошего (бесплатного) учебника CakePHP, который проходит через все функции фреймворка, но документация очень хорошо выложена и подробно описана. Все, что не ясно, может быть прояснено через группу Google и IRC, и мы приветствуем любые изменения и исправления в документации. Документация - это не просто основная проблема с разработчиками, так как многие вещи специфичны для приложений, и люди придумывают интересные советы и трюки, и поэтому каждый приглашается внести свой вклад (не просто комментарий!). Конечно, все модерируется, поэтому большая часть трещин/спама не добавляется.

Код является модульным, поскольку вы можете добавить новый код, который превосходит основные функции. Большая часть кода - это просто классы PHP. Это правда, что писать такую ​​функциональность может быть бременем, и я не пробовал использовать альтернативные классы в качестве fillins. Да, он не обрабатывает другие ORM, поэтому вы застряли с настройкой по умолчанию, но это должно быть исправлено в Cake3, который сможет смешать и сопоставить любые другие классы PHP по желанию (включая поддержку Propel и Doctrine).

CLI очень хорош, и его легко расширить для поддержки приложений. Одним из примеров является то, что я недавно разработал плагин оболочки, который автоматически установил бы любой другой CakePHP-плагин, который я проиндексировал из github. Взял около 5 часов, чтобы построить что-то чрезвычайно удобное и гибкое. Я уверен, что такая функциональность существует для Symfony, и она существует для RoR:)

Что касается Rails-like, это так, и это не так. Многие вещи схожи, в любом случае они являются структурами MVC, а CakePHP - для подхода "Соглашения против конфигурации". PHP4 поддерживает mucks с более сильным синтаксисом, который Symfony, несомненно, имеет из-за поддержки только PHP5, но он по-прежнему чрезвычайно полезен и интуитивно понятен. Рамка не предоставляет КАЖДУЮ функцию Rails из коробки, поскольку она не является прямым клоном. CakePHP - это структура, а не библиотека (привет Zend), поэтому она не будет предоставлять все из коробки.

Поколение представлений, я согласен, немного неловко в CakePHP. Он значительно улучшен в CakePHP 1.3 и 2.0. Он будет поддерживать пользовательские шаблоны для каждой модели, вида и контроллера (в отличие от типа просмотра, как сейчас). Кроме того, существует набор задач оболочки на github пользователем, идущим по neilcrookes, который автоматически испекает только определенные типы представлений (включая только просмотры администратора), которые могут использоваться в сочетании с пользовательскими шаблонами для получения именно того, что вы хотите. CSS-стиль также помогает:), но это определенно то, что можно улучшить.

CakePHP использует в нем множество различных параметров Model:: find, хотя в некоторых случаях может быть полезно использовать необработанные SQL-запросы. Метод Model:: find() очень гибкий и не подвел меня к созданию сложных находок. Я полагаю, что это связано с комфортом работы с ORM, что неизбежно требует времени.

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

Многомерные массивы немного глупы, но у вас все же есть многомерные объекты. У PHP4 была разбитая объектная модель, поэтому CakePHP не использует объекты. Это исправляется в будущей версии CakePHP (как я уже указывал выше в предыдущем комментарии), но в некоторых случаях полезно иметь фреймворк, который поддерживает PHP4. Опять же, YMMV и я согласны с тем, что полный PHP5 станет отличным дополнением к скорости приложения и развития.

Базы данных можно поменять по желанию. CakePHP не позволяет использовать функциональность, которая присуща только одному типу БД (отсюда и отброшенная поддержка ENUM, только в MySQL), так что ORM всегда поддерживается и всегда может создавать достоверные запросы. Вы можете иметь несколько баз данных в приложении, по одному на каждую модель, если хотите, и можете поменять их по своему желанию или даже не использовать базу данных вообще для конкретной модели. Таким образом, нет, он не привязан к конкретной базе данных.

В конце концов, ваш выбор является вашим собственным, и я искренне предлагаю заглянуть в оба и прочитать документацию, проверить группы, каналы IRC, блоги и любые форумы для обоих и посмотреть, какая структура подходит для вашего стиля разработки., Читатель будьте осторожны, я разработчик CakePHP, поэтому у моего сообщения есть предвзятость.

Ответ 6

В дополнение к существующим ответам, вы должны попробовать оба, если это возможно. Я использую оба довольно много, и в течение некоторого времени предпочитаю symfony.

но я уверен, что его не потому, что тот или иной лучше, а потому, что symfony, похоже, подходит для моего ума, который работает лучше, его ближе к тому, что я делаю, когда пишу программное обеспечение вне рамки, поэтому чувствует себя более интуитивным, Я ожидаю, что другие могут найти свой ум, соответствующий парадигме другой структуры.

Сказав это, я думаю, что объекты cakephp - это слабость благодаря использованию массивов, а не объектов. (Это то, что периодически развивается во внутреннюю ненависть во мне, когда мне нужно делать что-то, что усложняет...) Они могут делать то же самое, но возвращают объекты, а не массивы, чтобы представлять данные, и я думаю, что большая часть проблемы, которые у меня есть, исчезнут - вы сможете добавить дополнительные функции в объекты данных для достижения того, что я хочу сделать, вместо того, чтобы писать функции в существующем классе модели и передавать их массив.

Ответ 7

Слой модели CakePHP - беспорядок. Попробуйте сделать простые вещи, такие как отношения "многие ко многим" между объектом "Категория" и "Объект", а затем получить все элементы в категории, которые имеют определенный набор свойств.

Как

SELECT items.* FROM items, categories, item_categories WHERE item.available=1 AND category.id=1 AND item_categories.category_id = category.id

Что-то такое тривиальное невозможно в одном утверждении в торте с помощью метода find() модели.

В базовом API также нет способа добавить одно отношение "многие ко многим", как в одном элементе, в таблицу item_category, приведенную выше. Есть несколько решений в Интернете, в том числе поведение, которое кто-то отправил в пекарню (http://bakery.cakephp.org/articles/view/add-delete-habtm-behavior), но это просто то, что любая хорошая структура ORM, Propel, Torque (Java), Hibernate (Java), SQLObject (Python), SQLAlchemy (Python) прямо из коробки. В основном вам придется написать много PHP-кода, чтобы добавить эти недостающие функции или использовать необработанные SQL-запросы, но основная цель структуры - избегать выполнения этих действий, чтобы вы могли сосредоточиться на приложении, которое вы так что вы не очень сильно выигрываете с CakePHP.

Существует множество других проблем, и все они действительно связаны с уровнем модели, включая проверку формы, привязанную к слою модели, необходимость иметь дело с беспорядочными многомерными массивами, вынуждая использовать raw sql и привязывая ваше приложение к конкретной базы данных.

Я бы сказал, используя symfony. Это может потребоваться несколько дней для изучения, но это того стоит. Я собирался использовать CakePHP для проекта, над которым я работаю, после того, как я перешел к слишком многим из этих типов проблем, я переключился на symfony, и это было плавное плавание.

Ответ 8

Еще одно отличие: Symfony разделен на 3 среды: разработка, производство и тестирование - CakePHP не может! Легко разрабатывать и тестировать продукт в одно и то же время

Ответ 9

Cake 2.0 прекрасно загружает большинство классов, которые вам нужны, в то время как в Symfony 2 я обнаружил, что каждый класс должен иметь многочисленные импортные данные в верхней части script. Попытка запомнить все эти импорты почти невозможна, поэтому вам всегда нужна справочная информация.

, например. Код контроллера Symfony 2...

namespace Acme\HelloBundle\Controller;
use Symfony\Component\HttpFoundation\Response;
// bunch of other imports accumulate here...

class HelloController {
    ...

Argh, yuck. Хотя это может быть хорошей техникой OO для пуристов, это удлиняет время разработки (до свидания RAD). По крайней мере, с помощью Cake я могу быстро записать большую часть простых вещей из памяти.