Top Related Projects
Laravel is a web application framework with expressive, elegant syntax. We’ve already laid the foundation for your next big idea — freeing you to create without sweating the small things.
CakePHP: The Rapid Development Framework for PHP - Official Repository
Open Source PHP Framework (originally from EllisLab)
The Web framework for perfectionists with deadlines.
Ruby on Rails
Quick Overview
Symfony Demo is a reference application created by the Symfony team to showcase best practices for developing Symfony applications. It demonstrates how to build a blog application using Symfony's features and follows recommended coding standards and architectural patterns.
Pros
- Serves as an excellent learning resource for Symfony beginners and intermediate developers
- Implements best practices and design patterns recommended by the Symfony community
- Regularly updated to reflect the latest Symfony version and features
- Includes comprehensive documentation and comments throughout the codebase
Cons
- May be overly complex for absolute beginners trying to grasp basic Symfony concepts
- Focuses primarily on a blog application, which might not cover all use cases for enterprise applications
- Some advanced Symfony features might not be demonstrated in the demo
Code Examples
- Controller example:
#[Route('/blog', name: 'blog_index')]
public function index(PostRepository $posts): Response
{
$latestPosts = $posts->findLatest();
return $this->render('blog/index.html.twig', ['posts' => $latestPosts]);
}
This code defines a route for the blog index page and renders a template with the latest blog posts.
- Entity example:
#[ORM\Entity(repositoryClass: PostRepository::class)]
#[ORM\Table(name: 'symfony_demo_post')]
class Post
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column(type: 'integer')]
private ?int $id = null;
#[ORM\Column(type: 'string')]
#[Assert\NotBlank]
private ?string $title = null;
// ... other properties and methods
}
This code defines a Post entity with Doctrine ORM annotations and validation constraints.
- Twig template example:
{% extends 'base.html.twig' %}
{% block body %}
<h1>{{ 'title.post_list'|trans }}</h1>
{% for post in posts %}
<article>
<h2>
<a href="{{ path('blog_post', {slug: post.slug}) }}">
{{ post.title }}
</a>
</h2>
<p>{{ post.summary }}</p>
</article>
{% else %}
<div class="well">{{ 'post.no_posts_found'|trans }}</div>
{% endfor %}
{% endblock %}
This Twig template extends a base template and renders a list of blog posts.
Getting Started
-
Clone the repository:
git clone https://github.com/symfony/symfony-demo.git -
Install dependencies:
cd symfony-demo composer install -
Set up the database:
php bin/console doctrine:database:create php bin/console doctrine:schema:create php bin/console doctrine:fixtures:load -
Start the Symfony development server:
symfony serve -
Open your browser and navigate to
http://localhost:8000to see the demo application.
Competitor Comparisons
Laravel is a web application framework with expressive, elegant syntax. We’ve already laid the foundation for your next big idea — freeing you to create without sweating the small things.
Pros of Laravel
- More intuitive and beginner-friendly syntax
- Extensive ecosystem with a wide range of packages and tools
- Built-in features like Eloquent ORM and Artisan CLI
Cons of Laravel
- Can be slower for large-scale applications due to its "magic" features
- Less flexibility in architectural decisions compared to Symfony
- Steeper learning curve for advanced concepts and customizations
Code Comparison
Laravel (routes/web.php):
Route::get('/', function () {
return view('welcome');
});
Symfony (config/routes.yaml):
index:
path: /
controller: App\Controller\DefaultController::index
Laravel uses a more concise and expressive routing syntax, while Symfony follows a more structured and explicit approach. Laravel's routing is typically defined in a single file, whereas Symfony uses YAML configuration files for routing.
Both frameworks offer powerful features and are widely used in the PHP community. Laravel excels in rapid development and ease of use, while Symfony provides more flexibility and control over the application architecture. The choice between them often depends on project requirements, team expertise, and personal preferences.
CakePHP: The Rapid Development Framework for PHP - Official Repository
Pros of CakePHP
- More comprehensive framework with built-in ORM, authentication, and caching
- Extensive documentation and large community support
- Rapid development with code generation tools (e.g., Bake console)
Cons of CakePHP
- Steeper learning curve due to its convention-over-configuration approach
- Less flexibility in customizing application structure compared to Symfony
- Potentially slower performance for large-scale applications
Code Comparison
CakePHP controller example:
class ArticlesController extends AppController
{
public function index()
{
$articles = $this->Articles->find('all');
$this->set(compact('articles'));
}
}
Symfony controller example:
class ArticleController extends AbstractController
{
public function index(ArticleRepository $repository): Response
{
$articles = $repository->findAll();
return $this->render('article/index.html.twig', ['articles' => $articles]);
}
}
The CakePHP example demonstrates its convention-based approach, while the Symfony example shows more explicit dependency injection and response handling. CakePHP's controller automatically sets variables for the view, whereas Symfony requires explicit rendering. Both frameworks offer powerful features, but their approaches to structuring code and handling requests differ slightly.
Open Source PHP Framework (originally from EllisLab)
Pros of CodeIgniter4
- Lightweight and faster performance
- Simpler learning curve for beginners
- Minimal configuration required
Cons of CodeIgniter4
- Less extensive documentation compared to Symfony
- Smaller ecosystem and fewer third-party libraries
- Limited built-in features for complex applications
Code Comparison
CodeIgniter4 routing:
$routes->get('/', 'Home::index');
$routes->get('users/(:num)', 'Users::show/$1');
Symfony routing:
index:
path: /
controller: App\Controller\HomeController::index
user_show:
path: /users/{id}
controller: App\Controller\UserController::show
CodeIgniter4 focuses on simplicity and ease of use, making it suitable for smaller projects and beginners. Symfony offers a more robust framework with extensive features and better scalability for larger, complex applications. CodeIgniter4's routing is more straightforward, while Symfony's YAML-based routing provides more flexibility and readability for complex route configurations.
The Web framework for perfectionists with deadlines.
Pros of Django
- More comprehensive and feature-rich out-of-the-box, including an admin interface
- Larger community and ecosystem, with more third-party packages available
- Better suited for larger, more complex applications
Cons of Django
- Steeper learning curve due to its monolithic nature
- Less flexibility in choosing components, as it follows the "batteries included" philosophy
- Can be overkill for smaller projects or microservices
Code Comparison
Django (models.py):
from django.db import models
class Article(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
pub_date = models.DateTimeField('date published')
Symfony (Entity/Article.php):
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
#[ORM\Entity]
class Article
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column]
private ?int $id = null;
#[ORM\Column(length: 255)]
private ?string $title = null;
#[ORM\Column(type: 'text')]
private ?string $content = null;
#[ORM\Column(type: 'datetime')]
private ?\DateTimeInterface $publishedAt = null;
}
Both frameworks use an ORM for database interactions, but Django's syntax is more concise. Symfony requires more verbose annotations/attributes for entity mapping.
Ruby on Rails
Pros of Rails
- More mature and established ecosystem with a larger community
- Follows "Convention over Configuration" principle, leading to faster development
- Extensive built-in testing tools and generators
Cons of Rails
- Steeper learning curve for beginners due to its "magic" and conventions
- Can be slower in performance compared to Symfony for large-scale applications
- Less flexibility in architectural decisions due to opinionated nature
Code Comparison
Rails (Active Record model):
class User < ApplicationRecord
validates :name, presence: true
has_many :posts
belongs_to :team
end
Symfony (Doctrine entity):
use Doctrine\ORM\Mapping as ORM;
#[ORM\Entity]
class User
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column(type: 'integer')]
private $id;
#[ORM\Column(type: 'string', length: 255)]
private $name;
// Getters and setters...
}
The Rails example showcases its concise syntax and built-in ActiveRecord associations, while the Symfony example demonstrates a more explicit approach using Doctrine annotations for entity mapping.
Convert
designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
Symfony Demo Application
The "Symfony Demo Application" is a reference application created to show how to develop applications following the Symfony Best Practices.
You can also learn about these practices in the official Symfony Book.
Requirements
- PHP 8.2.0 or higher;
- PDO-SQLite PHP extension enabled;
- and the usual Symfony application requirements.
Installation
There are 3 different ways of installing this project depending on your needs:
Option 1. Download Symfony CLI and use the symfony binary installed
on your computer to run this command:
symfony new --demo my_project
Option 2. Download Composer and use the composer binary installed
on your computer to run these commands:
# you can create a new project based on the Symfony Demo project...
composer create-project symfony/symfony-demo my_project
# ...or you can clone the code repository and install its dependencies
git clone https://github.com/symfony/demo.git my_project
cd my_project/
composer install
Option 3. Click the following button to deploy this project on Platform.sh, the official Symfony PaaS, so you can try it without installing anything locally:
Usage
There's no need to configure anything before running the application. There are 2 different ways of running this application depending on your needs:
Option 1. Download Symfony CLI and run this command:
cd my_project/
symfony serve
Then access the application in your browser at the given URL (https://localhost:8000 by default).
Option 2. Use a web server like Nginx or Apache to run the application (read the documentation about configuring a web server for Symfony).
On your local machine, you can run this command to use the built-in PHP web server:
cd my_project/
php -S localhost:8000 -t public/
Tests
Execute this command to run tests:
cd my_project/
./bin/phpunit
Top Related Projects
Laravel is a web application framework with expressive, elegant syntax. We’ve already laid the foundation for your next big idea — freeing you to create without sweating the small things.
CakePHP: The Rapid Development Framework for PHP - Official Repository
Open Source PHP Framework (originally from EllisLab)
The Web framework for perfectionists with deadlines.
Ruby on Rails
Convert
designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot