Last week I just joined the ec-cube project which is a cms build on symfony framework, in this article I will guide you to build basic CRUD application.
Introduce
Symfony is a set of PHP Components, a Web Application framework, a Philosophy, and a Community – all working together in harmony.
- Symfony framework: A leading PHP framework for creating websites and web applications. Built on the Symfony Components.
- Symfony component: A set of separate and reusable components, some built-in PHP applications like Drupal, phpBB, eZ Publish …
- Community: A community of more than 600,000 developers from over 120 countries.
- Philosophy: Promote the professionalism, best practices, standardization and interoperability of applications.
Setting
- Run up the command line
wget https://get.symfony.com/cli/installer -O - | bash
- Install it on global:
mv /home/linhdn1198/.symfony/bin/symfony /usr/local/bin/symfony
- Check the version
- Create new project
symfony new my_project_name
orcomposer create-project symfony/website-skeleton my_project_name
Begin
Install some components
composer require annotations
: Allows you to use comments to define a route Example:composer require twig
: The template allows you to use some specific syntax beyond the view.composer require symfony/maker-bundle --dev
: Allows you to execute the command make command to create entity, controller, form …composer require symfony/orm-pack
: Supports database manipulation.composer require form validator security-csrf
: Support to create forms, validate data and secure csrf for forms.
Components in symfony
- Entity: This class uses Doctrine to create entities and communicate with the database.
@ORMEntity(repositoryClass="AppRepositorySimNumberRepository")
: Define Repository class for Entity.@ORMId()
Set $ id as the primary key.@ORMGeneratedValue()
Set the self-@ORMGeneratedValue()
value.@ORMColumn(type="integer")
Set data types.- There are also relations:
@OneToMany
,@ManyToOne
,@ManyToMany
…
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | <span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token keyword">namespace</span> <span class="token package">App Entity</span> <span class="token punctuation">;</span> <span class="token keyword">use</span> <span class="token package">Doctrine ORM Mapping</span> <span class="token keyword">as</span> <span class="token constant">ORM</span> <span class="token punctuation">;</span> <span class="token comment">/** * @ORMEntity(repositoryClass="AppRepositorySimNumberRepository") */</span> <span class="token keyword">class</span> <span class="token class-name">SimNumber</span> <span class="token punctuation">{</span> <span class="token comment">/** * @ORMId() * @ORMGeneratedValue() * @ORMColumn(type="integer") */</span> <span class="token keyword">private</span> <span class="token variable">$id</span> <span class="token punctuation">;</span> <span class="token comment">/** * @ORMColumn(type="string", length=14) */</span> <span class="token keyword">private</span> <span class="token variable">$number</span> <span class="token punctuation">;</span> <span class="token comment">/** * @ORMColumn(type="decimal", precision=10, scale=0) */</span> <span class="token keyword">private</span> <span class="token variable">$price</span> <span class="token punctuation">;</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">getId</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">:</span> <span class="token operator">?</span> int <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token variable">$this</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token property">id</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">getNumber</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">:</span> <span class="token operator">?</span> string <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token variable">$this</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token property">number</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">setNumber</span> <span class="token punctuation">(</span> string <span class="token variable">$number</span> <span class="token punctuation">)</span> <span class="token punctuation">:</span> self <span class="token punctuation">{</span> <span class="token variable">$this</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token property">number</span> <span class="token operator">=</span> <span class="token variable">$number</span> <span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token variable">$this</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">getPrice</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">:</span> <span class="token operator">?</span> string <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token variable">$this</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token property">price</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">setPrice</span> <span class="token punctuation">(</span> string <span class="token variable">$price</span> <span class="token punctuation">)</span> <span class="token punctuation">:</span> self <span class="token punctuation">{</span> <span class="token variable">$this</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token property">price</span> <span class="token operator">=</span> <span class="token variable">$price</span> <span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token variable">$this</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> </span> |
- Repository: The class that
ServiceEntityRepository.php
in this class inheritsEntityRepository.php
that defines the basic functions find (), findOneBy (), findAll (), findBy ().
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token keyword">namespace</span> <span class="token package">App Repository</span> <span class="token punctuation">;</span> <span class="token keyword">use</span> <span class="token package">App Entity SimNumber</span> <span class="token punctuation">;</span> <span class="token keyword">use</span> <span class="token package">Doctrine Bundle DoctrineBundle Repository ServiceEntityRepository</span> <span class="token punctuation">;</span> <span class="token keyword">use</span> <span class="token package">Doctrine Persistence ManagerRegistry</span> <span class="token punctuation">;</span> <span class="token comment">/** * @method SimNumber|null find($id, $lockMode = null, $lockVersion = null) * @method SimNumber|null findOneBy(array $criteria, array $orderBy = null) * @method SimNumber[] findAll() * @method SimNumber[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) */</span> <span class="token keyword">class</span> <span class="token class-name">SimNumberRepository</span> <span class="token keyword">extends</span> <span class="token class-name">ServiceEntityRepository</span> <span class="token punctuation">{</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">__construct</span> <span class="token punctuation">(</span> ManagerRegistry <span class="token variable">$registry</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">parent</span> <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token function">__construct</span> <span class="token punctuation">(</span> <span class="token variable">$registry</span> <span class="token punctuation">,</span> SimNumber <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token keyword">class</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> </span> |
- Controller: In controller can route
@Route("<url>", name="<name_route>", methods={"<GET, POST...>"})
routes@Route("<url>", name="<name_route>", methods={"<GET, POST...>"})
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | <span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token keyword">namespace</span> <span class="token package">App Controller</span> <span class="token punctuation">;</span> <span class="token keyword">use</span> <span class="token package">App Entity SimNumber</span> <span class="token punctuation">;</span> <span class="token keyword">use</span> <span class="token package">App Form SimNumberType</span> <span class="token punctuation">;</span> <span class="token keyword">use</span> <span class="token package">App Repository SimNumberRepository</span> <span class="token punctuation">;</span> <span class="token keyword">use</span> <span class="token package">Symfony Bundle FrameworkBundle Controller AbstractController</span> <span class="token punctuation">;</span> <span class="token keyword">use</span> <span class="token package">Symfony Component HttpFoundation Request</span> <span class="token punctuation">;</span> <span class="token keyword">use</span> <span class="token package">Symfony Component HttpFoundation Response</span> <span class="token punctuation">;</span> <span class="token keyword">use</span> <span class="token package">Symfony Component Routing Annotation Route</span> <span class="token punctuation">;</span> <span class="token comment">/** * @Route("/sim-number") */</span> <span class="token keyword">class</span> <span class="token class-name">SimNumberController</span> <span class="token keyword">extends</span> <span class="token class-name">AbstractController</span> <span class="token punctuation">{</span> <span class="token comment">/** * @Route("/", name="sim_number_index", methods={"GET"}) */</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">index</span> <span class="token punctuation">(</span> SimNumberRepository <span class="token variable">$simNumberRepository</span> <span class="token punctuation">)</span> <span class="token punctuation">:</span> Response <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token variable">$this</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">render</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'sim_number/index.html.twig'</span> <span class="token punctuation">,</span> <span class="token punctuation">[</span> <span class="token single-quoted-string string">'sim_numbers'</span> <span class="token operator">=</span> <span class="token operator">></span> <span class="token variable">$simNumberRepository</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">findAll</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span> <span class="token punctuation">]</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> </span> |
- Form: This class to create the form with the add method (‘<name_input>’, ‘<type_input>’, [<opstions>])
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | <span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token keyword">namespace</span> <span class="token package">App Form</span> <span class="token punctuation">;</span> <span class="token keyword">use</span> <span class="token package">App Entity SimNumber</span> <span class="token punctuation">;</span> <span class="token keyword">use</span> <span class="token package">Symfony Component Form AbstractType</span> <span class="token punctuation">;</span> <span class="token keyword">use</span> <span class="token package">Symfony Component Form FormBuilderInterface</span> <span class="token punctuation">;</span> <span class="token keyword">use</span> <span class="token package">Symfony Component OptionsResolver OptionsResolver</span> <span class="token punctuation">;</span> <span class="token keyword">use</span> <span class="token package">Symfony Component Form Extension Core Type TextType</span> <span class="token punctuation">;</span> <span class="token keyword">use</span> <span class="token package">Symfony Component Form Extension Core Type NumberType</span> <span class="token punctuation">;</span> <span class="token keyword">use</span> <span class="token package">Symfony Component Form Extension Core Type SubmitType</span> <span class="token punctuation">;</span> <span class="token keyword">class</span> <span class="token class-name">SimNumberType</span> <span class="token keyword">extends</span> <span class="token class-name">AbstractType</span> <span class="token punctuation">{</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">buildForm</span> <span class="token punctuation">(</span> FormBuilderInterface <span class="token variable">$builder</span> <span class="token punctuation">,</span> <span class="token keyword">array</span> <span class="token variable">$options</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$builder</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">add</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'number'</span> <span class="token punctuation">,</span> TextType <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token keyword">class</span> <span class="token punctuation">,</span> <span class="token punctuation">[</span> <span class="token single-quoted-string string">'attr'</span> <span class="token operator">=</span> <span class="token operator">></span> <span class="token punctuation">[</span> <span class="token single-quoted-string string">'class'</span> <span class="token operator">=</span> <span class="token operator">></span> <span class="token single-quoted-string string">'form-control'</span> <span class="token punctuation">,</span> <span class="token punctuation">]</span> <span class="token punctuation">]</span> <span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">add</span> <span class="token punctuation">(</span> <span class="token single-quoted-string string">'price'</span> <span class="token punctuation">,</span> NumberType <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token keyword">class</span> <span class="token punctuation">,</span> <span class="token punctuation">[</span> <span class="token single-quoted-string string">'attr'</span> <span class="token operator">=</span> <span class="token operator">></span> <span class="token punctuation">[</span> <span class="token single-quoted-string string">'class'</span> <span class="token operator">=</span> <span class="token operator">></span> <span class="token single-quoted-string string">'form-control'</span> <span class="token punctuation">,</span> <span class="token punctuation">]</span> <span class="token punctuation">]</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">configureOptions</span> <span class="token punctuation">(</span> OptionsResolver <span class="token variable">$resolver</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$resolver</span> <span class="token operator">-</span> <span class="token operator">></span> <span class="token function">setDefaults</span> <span class="token punctuation">(</span> <span class="token punctuation">[</span> <span class="token single-quoted-string string">'data_class'</span> <span class="token operator">=</span> <span class="token operator">></span> SimNumber <span class="token punctuation">:</span> <span class="token punctuation">:</span> <span class="token keyword">class</span> <span class="token punctuation">,</span> <span class="token punctuation">]</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> </span> |
- Twig: A template that allows to write short, easy to read and friendly syntax. Some basic syntax.
{{ ... }}
: Used to display the contents of a variable or the result of a conditional expression.{% ... %}
: Used to handle some conditional logic, loop.{# ... #}
: Used for commenting.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <span class="token doctype"><!DOCTYPE html></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> html</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> head</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> meta</span> <span class="token attr-name">charset</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> UTF-8 <span class="token punctuation">"</span></span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> title</span> <span class="token punctuation">></span></span> {% block title %}Welcome!{% endblock %} <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> title</span> <span class="token punctuation">></span></span> {% block stylesheets %}{% endblock %} <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> head</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> body</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> div</span> <span class="token attr-name">class</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> container <span class="token punctuation">"</span></span> <span class="token punctuation">></span></span> {% block body %}{% endblock %} <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> div</span> <span class="token punctuation">></span></span> {% block javascripts %}{% endblock %} <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> body</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> html</span> <span class="token punctuation">></span></span> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | {% extends 'base.html.twig' %} {% block title %}SimNumber index{% endblock %} {% block body %} <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> h1</span> <span class="token punctuation">></span></span> SimNumber index <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> h1</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> table</span> <span class="token attr-name">class</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> table table-border table-hover <span class="token punctuation">"</span></span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> thead</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> tr</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> th</span> <span class="token punctuation">></span></span> Id <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> th</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> th</span> <span class="token punctuation">></span></span> Number <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> th</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> th</span> <span class="token punctuation">></span></span> Price <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> th</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> th</span> <span class="token punctuation">></span></span> actions <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> th</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> tr</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> thead</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> tbody</span> <span class="token punctuation">></span></span> {% for sim_number in sim_numbers %} <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> tr</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> td</span> <span class="token punctuation">></span></span> {{ sim_number.id }} <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> td</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> td</span> <span class="token punctuation">></span></span> {{ sim_number.number }} <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> td</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> td</span> <span class="token punctuation">></span></span> {{ sim_number.price }} <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> td</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> td</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> a</span> <span class="token attr-name">href</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> {{ path( <span class="token punctuation">'</span> sim_number_show <span class="token punctuation">'</span> , { <span class="token punctuation">'</span> id <span class="token punctuation">'</span> : sim_number.id}) }} <span class="token punctuation">"</span></span> <span class="token attr-name">class</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> btn btn-outline-info <span class="token punctuation">"</span></span> <span class="token punctuation">></span></span> show <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> a</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> a</span> <span class="token attr-name">href</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> {{ path( <span class="token punctuation">'</span> sim_number_edit <span class="token punctuation">'</span> , { <span class="token punctuation">'</span> id <span class="token punctuation">'</span> : sim_number.id}) }} <span class="token punctuation">"</span></span> <span class="token attr-name">class</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> btn btn-outline-warning <span class="token punctuation">"</span></span> <span class="token punctuation">></span></span> edit <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> a</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> td</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> tr</span> <span class="token punctuation">></span></span> {% else %} <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> tr</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> td</span> <span class="token attr-name">colspan</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> 4 <span class="token punctuation">"</span></span> <span class="token punctuation">></span></span> no records found <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> td</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> tr</span> <span class="token punctuation">></span></span> {% endfor %} <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> tbody</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> table</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> a</span> <span class="token attr-name">href</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> {{ path( <span class="token punctuation">'</span> sim_number_new <span class="token punctuation">'</span> ) }} <span class="token punctuation">"</span></span> <span class="token attr-name">class</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> btn btn-primary <span class="token punctuation">"</span></span> <span class="token punctuation">></span></span> Create new <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> a</span> <span class="token punctuation">></span></span> {% endblock %} |
Construction begins
- Start the symfony server under local
symfony server:start
- Edit file .env
DATABASE_URL=mysql://db_user: [email protected] :3306/db_name?serverVersion=5.7
- My configuration is
DATABASE_URL=mysql://root: [email protected] :3306/symfony?serverVersion=5.7
- Create entity with the following command
php bin/console make:entity SimNumber
- After creating the entity, go to phpmyadmin to create the databse with the config name in the .env file and start the database gen.
php bin/console doctrine:schema:update --dump-sql
Debug see command to create databasephp bin/console doctrine:schema:update --force
Update the database first
- Now that we have the database, we use the cmd make crud, it will give us all the files and the source code for the crud function.
- Here I customize the url / sim / number -> / sim-number in the src / Controller / SimNumberController.php line 13-> 15
1 2 3 4 | <span class="token comment">/** * @Route("/sim-number") */</span> |
- To make the interface easier to see, I have added bootstrap to the templates / base.html.twig file and slightly modified the interface.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <span class="token doctype"><!DOCTYPE html></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> html</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> head</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> meta</span> <span class="token attr-name">charset</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> UTF-8 <span class="token punctuation">"</span></span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> title</span> <span class="token punctuation">></span></span> {% block title %}Welcome!{% endblock %} <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> title</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> link</span> <span class="token attr-name">rel</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> stylesheet <span class="token punctuation">"</span></span> <span class="token attr-name">href</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css <span class="token punctuation">"</span></span> <span class="token attr-name">integrity</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm <span class="token punctuation">"</span></span> <span class="token attr-name">crossorigin</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> anonymous <span class="token punctuation">"</span></span> <span class="token punctuation">></span></span> {% block stylesheets %}{% endblock %} <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> head</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> body</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> div</span> <span class="token attr-name">class</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> container <span class="token punctuation">"</span></span> <span class="token punctuation">></span></span> {% block body %}{% endblock %} <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> div</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> script</span> <span class="token attr-name">src</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> https://code.jquery.com/jquery-3.2.1.slim.min.js <span class="token punctuation">"</span></span> <span class="token attr-name">integrity</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN <span class="token punctuation">"</span></span> <span class="token attr-name">crossorigin</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> anonymous <span class="token punctuation">"</span></span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> script</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> script</span> <span class="token attr-name">src</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js <span class="token punctuation">"</span></span> <span class="token attr-name">integrity</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q <span class="token punctuation">"</span></span> <span class="token attr-name">crossorigin</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> anonymous <span class="token punctuation">"</span></span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> script</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> script</span> <span class="token attr-name">src</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js <span class="token punctuation">"</span></span> <span class="token attr-name">integrity</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl <span class="token punctuation">"</span></span> <span class="token attr-name">crossorigin</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> anonymous <span class="token punctuation">"</span></span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> script</span> <span class="token punctuation">></span></span> {% block javascripts %}{% endblock %} <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> body</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> html</span> <span class="token punctuation">></span></span> |
- Now go to http://127.0.0.1:8000/sim-number/ to see the results ~