Creating an Online Store with Symfony – Part 1: Documentation

This is work in progress


  1. Project Description
  2. Requirements and Technologies
  3. Modules (Frontend and Backend)
  4. Objects and Database
  5. Frontend Sections
  6. Backend Sections
  7. Graphic Design

1. Project Description

Project aims to create a full-featured ecommerce solution. Backend administration area will include classic features like managing product catalog, categories, standard and custom product attributes, managing sales, users and part of the website content, also viewing reports. Will not manage inventory (stock) at this time.
Front website should be elegant, span the entire width of the browser and emphasize quick access to product info (image, price, attributes). Will feature large images, smooth transitions and simple interactions. All information should be clearly and easily available (product list, product info, cart, user profile info, categories) through as few user actions as possible (all info on the same page, few page reloads).

Note: All code (including comments) will be written in English, the forms in the administration area will have English names, but error messages, some mockups and all designs will be translated to Romanian.

2. Requirements and Technologies

Project will use:
Database: MySQL
Server: Linux / Apache / PHP 5
Framework: symfony 1.4 with Doctrine

3. Modules

3.1 Frontend Symfony Modules

Deals with product pages. Listings for home page, category page, search results page (grid or list) and also product details page. Should include templates for:
- product list (grid)
- product details

Most likely developed on top of a plugin such as  sfGuard.
Will additionally include templates for:
- user profile (view and edit profile details, shipping and billing address, company information)
- order history
- order details page
- cart (developed as a separate module or component?)
- checkout
- wishlist
- reviews

Additional pages (Policy, Help Page, About Us, etc)

3.2 Backend Symfony Modules












4. Objects and Database

4.1 Objects

Database Table: sf_guard_user
Table Fields: id, first_name, last_name, email_address, username, algorithm, salt, password, is_active, is_super_admin, last_login, created_at, updated_at

Database Table: profiles
Table Fields: id, about

Database Table: products
Table Fields: id, title, description, description_full, code, brand_id, price, price_promo, is_active, created_at, updated_at

Database Table: images
Table fields: id, product_id, image

Database Table: categories
Table Fields:  id, title, category_id, description, image, is_active, created_at, updated_at

Database Table: product_to_category
Table Fields: product_id, category_id

Database Table: attributes
Table Fields: id, name, code, attribute_set_id, is_system, is_active, scope

Database Table: attribute_sets
Table Fields: id, name

Database Table: product_to_attribute
Table Fields: product_id, attribute_id

Database Table: brands
Table Fields: id, name, is_active

Database Table: orders
Table Fields: id, user_id, billing_address, shipping_address, amount, created_at, status

Database Table: orders_to_products
Table Fields: order_id, product_id






4.2 Database

Once I’ve created the database diagram (using MySQL Workbench), I used a plugin called Doctrine Export to generate a YAML database schema.
Changes were made in YAML in various places, such as: class names (capitalized or changed slightly), removed ‘created_at’ and ‘updated_at’ fields and replaced them with the simpler ‘Timestampable: ~’, also added ‘Sluggable’ fields where necessary. Some relationships had to be rewritten.

5. Frontend Sections

TODO: list of frontend sections (home, product list, product details, category page, search, filters, cart, wishlist, user login, user register, user profile, checkout, etc)

6. Backend Sections

6.1 Orders

6.1 a) Order list

Display fields: id, user name, order date, total price, order status

Description: lists orders made through website (completed checkouts) ordered by date. Order row links to order details (6.2 b). User name links to user details, status can be changed to: Pending, Processing, On Hold, Completed, Canceled.
List can be filtered, searched, ordered.

6.1 b) Order details

Display fields: id, user details, order date, billing address, shipping address, products list, prices, total price, order date, order status.

Description: Full details regarding order, all info should be clearly visible within the same screen.

6.2 Catalog

6.2.1 Products

6.2.1 a) Products list

Display fields: id, product code, product image, product title, product type, category, price, stock, visibility

Description: Lists products in the Catalog. Basic CRUD operations clearly available. Hover over image thumbnail displays larger image preview.
List can be filtered, searched, ordered.

6.2.1 b) Product Details

Display fields: title, product code, system attributes (see 6.2.3), prices, images, short description, full description, stock, categories, brand, type, reviews, tags, custom attributes set, visibility, etc.

Description: Edit product details, page should be clearly separated into a few sections: Basic (system) Attributes, Category Selection, Custom Attributes, Images, Reviews, Tags.

6.2.2 Categories

6.2.2 a) Categories Hierarchy

Description: Nested view of categories, features simple drag & drop. Each category also displays number of products attached to it.

6.2.2 b) Add/Edit Category

Display fields: title, URL, description, image, page title, included in navigation, visibility, link to view attached products.

Description: Form for adding and editing categories. Upon completion, category is added as a child of the root category. Admin needs to enter 6.2.2 (a) section to establish hierarchy.

6.2.3 Attributes

6.2.3 a) Attributes List

Display fields: code, name, visibility, type (system or custom), scope (where attribute is listed), set (parent group of attribute – see 6.2.3 (c))

Description: Attributes are defined as snippets of additional information about a product. There are system attributes, which cannot be changed or deleted (such as price, promo price, description, stock, etc) and custom attributes, which are defined by the admin and are grouped into sets. Admin can attach set (or individual attributes?) to product.
Example: The set “Cameras” (internal name) might group custom attributes such as “memory”, “lens type”, “connectivity” and “megapixels”. When the admin attaches the set “Cameras” to the product “Sony Cybershot ZX420D”, he can then manually fill in the custom attributes for this product.
List can be filtered, searched, ordered.

6.2.3 b) Add/Edit Attribute

Display fields: code, name, visibility, set, mode (could be text, textarea, dropdown, radios, etc)

Description: Admin creates attributes to be later attached to products.
Example: code “camera_megapixels”, name “Resolution (MP)”, mode “text field”.

6.2.3 c) Attribute Sets

Display fields: Name (internal)

Description: Add sets (groups) and then attach attributes in section 6.2.3 (b) above.

6.2.4 Reviews

Display fields: product title, review text (excerpt), user, date, rating, status.

Description: Lists user product reviews, admin can edit, change status from pending to approved or delete review.
List can be filtered, searched, ordered.

6.2.5 Tags

TO DO: define tag management system

6.3 Customers

6.3 a) Customer (user) list

Display fields: name, email, phone, address, created date, last login date, number of orders, number of completed orders, total amount of completed orders.

Description: Lists users registered within the system and basic contact and order details. Clicking user links to full user details page.
List can be filtered, searched, ordered.

6.3 b) Edit User

Display fields: name, email, account creation date, last login date, shipping address, billing address.

Description: Edit user details, admin can view/edit all details. Link is available for Order List by selected user.

6.4 CMS (Pages)

6.4 a) Pages list

Display fields: name, URL, content (excerpt)

6.4 b) Add/Edit Page

Display fields: page name, page title (in website), URL, content (HTML editor), visibility.

Description: Admin can create pages with HTML content, define name and page title.

6.5 Reports


(common reports should include sales, products, users, reviews, search terms)

6.6 Config

Admin configuration options.

TO DO: define options

6.7 Rules

TO DO: define mechanism

7. Graphic Design

The idea is to have a grid that spans the entire width of the browser as the main module of the website. Grid would normally contain products but can also accomodate categories, filters, shopping cart, wishlist, even the footer.

Design Sketch online shop step 1 - the grid idea

See part 2 of the tutorial for more: Creating an online store with symfony – Part 2: Design

3 Responses to “Creating an Online Store with Symfony – Part 1: Documentation”

  1. Pedro Casado says:


  2. Tike says:

    Smack-dab what I was loonkig for?ty!

  3. cerbu says:

    All good until I realise that the database have a problem , no price for product

Leave a Reply