Symfony : step-by-step guide to creating CRUD

Andro
2 min readJan 27, 2025

--

Symfony is a popular PHP framework that provides a robust set of tools for building web applications. One of the key features of Symfony is its ability to generate CRUD (Create, Read, Update, Delete) operations automatically. Below is a step-by-step guide to creating CRUD operations in Symfony:

1. Install Symfony

If you haven’t already installed Symfony, you can do so using Composer:

composer create-project symfony/website-skeleton my_project
cd my_project

2. Create a Database Entity

Entities in Symfony represent database tables. You can create an entity using the Symfony MakerBundle.

php bin/console make:entity

Follow the prompts to define your entity’s fields (e.g., name, description, price, etc.).

3. Generate a Migration

After creating the entity, generate a migration to create the corresponding database table:

php bin/console make:migration
php bin/console doctrine:migrations:migrate

4. Generate CRUD Operations

Symfony can automatically generate CRUD controllers and templates for your entity:

php bin/console make:crud

You will be prompted to enter the name of your entity (e.g., Product). Symfony will generate:

  • A controller with CRUD actions (ProductController.php).
  • Templates for listing, creating, editing, and showing entities (in templates/product/).
  • A form type for the entity.

5. Customize the Generated CRUD

The generated CRUD is fully functional, but you may want to customize it:

Controller

  • Edit the ProductController.php file to modify the logic for listing, creating, updating, or deleting entities.

Templates

  • Customize the Twig templates in templates/product/ to match your application's design.

Form

  • Edit the form type in src/Form/ProductType.php to add or remove fields.

6. Test the CRUD

Run your Symfony development server:

symfony serve

Visit the CRUD routes in your browser, such as:

  • List all entities: /product/
  • Create a new entity: /product/new
  • Edit an entity: /product/{id}/edit
  • Delete an entity: /product/{id} (via a DELETE request)

7. Add Validation

Add validation rules to your entity using annotations or YAML/XML configuration. For example:

// src/Entity/Product.php
use Symfony\Component\Validator\Constraints as Assert;

class Product
{
/**
* @Assert\NotBlank
* @Assert\Length(min=3, max=100)
*/
private $name;
// ...
}

8. Secure the CRUD

Use Symfony’s security component to restrict access to the CRUD operations. For example:

# config/packages/security.yaml
security:
access_control:
- { path: ^/product, roles: ROLE_ADMIN }

9. Optimize and Extend

  • Use Symfony’s Pagination for large datasets.
  • Add Search and Filter functionality.
  • Use Event Listeners or Services to handle additional logic.

Example Entity: Product

Here’s an example of a Product entity:

// src/Entity/Product.php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity(repositoryClass="App\Repository\ProductRepository")
*/
class Product
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", length=255)
*/
private $name;
/**
* @ORM\Column(type="text")
*/
private $description;
/**
* @ORM\Column(type="float")
*/
private $price;
// Getters and Setters
public function getId(): ?int
{
return $this->id;
}
public function getName(): ?string
{
return $this->name;
}
public function setName(string $name): self
{
$this->name = $name;
return $this;
}
// ...
}

Conclusion

Symfony’s CRUD generator is a powerful tool that saves time when building basic data management interfaces. By following the steps above, you can quickly create and customize CRUD operations for your Symfony application. For more advanced features, refer to the Symfony documentation.

--

--

Andro
Andro

Written by Andro

Laravel & React developer passionate about building dynamic web apps. Focused on creating efficient, scalable solutions and delivering seamless user experiences

No responses yet