Start a new Symfony application using the Symfony installer (similar to the Express application generator). Type the following command in your shell (for Linux / Mac) or command prompt (for Windows):
symfony new guestbook
where guestbook
is the name of the application.
The application will be stored on the guestbook
directory. Now change the current directory to guestbook
.
Do you notice that there is a file called composer.json
? Similar to any Node.js application which uses package.json
, Composer (the package manager used by Symfony) also use a JSON file for specifying required packages.
Symfony provides a convenient command-line tool. Type this command to see its usage:
php app/console
This command will be used a lot during development.
The application is ready to run! PHP has a built-in web server for development and Symfony provides a shortcut for that. Now type the following command:
php app/console server:run
and open your browser and access the http://localhost:8000. You should see a welcome page of Symfony.
Before doing development, you need to configure the application first. You can configure the application by modifying the configuration file app/config/parameters.yml
, or by using the graphical user interface on the welcome page.
Please configure the database for later usage.
After this, you can terminate the server with Ctrl+C
.
It is time to start coding! In Symfony, all your application code is inside bundles. So let's use the command-line tool to create a new bundle called CuhkCseGuestbookBundle
.
php app/console generate:bundle
or
php app/console generate:bundle --namespace=CuhkCse/GuestbookBundle --format=yml
Note that it is optional to specify arguments. If arguments are missing, it will enter interactive mode for inputting the values you want.
Let's use CuhkCse/GuestbookBundle
for the bundle namespace. Each bundle is hosted under a namespace, which begins with a vendor name (e.g., company name, project name, client name, etc.), followed by one or more optional category
sub-namespaces, and it should end with the bundle name itself.
For most of the options, you just need to keep the default values. For the configuration format, I suggest using yml
which is the most simplest format (as you will see later).
After this operation, the directory for the bundle is created at src/CuhkCse/GuestbookBundle
.
Creating pages involve two steps: creating the route and implement the corresponding controller method.
By default, the routing configuration file in a Symfony application is located at app/config/routing.yml
.
This is the first YAML file you see in Symfony! YAML stands for "YAML Ain't Markup Language". It is designed to be a human-readable data serialization format.
Note that there is an entry called cuhk_cse_guestbook
. This is automatically added when the CuhkCseGuestbookBundle
is generated. It imports the routing.yml
file under src/CuhkCse/GuestbookBundle/Resources/config/
.
In our guest book application, we are going to define two routes. One for displaying the messages, while one for submitting new messages. Replace the contents in src/CuhkCse/GuestbookBundle/Resources/config/routing.yml
to add two entries:
cuhk_cse_guestbook_homepage:
path: /
defaults: { _controller: CuhkCseGuestbookBundle:Default:index }
cuhk_cse_guestbook_form:
path: /form
defaults: { _controller: CuhkCseGuestbookBundle:Default:form }
Note that you can only use 4 spaces for indentation. No tabs are allowed!
routing.yml
, the value of _controller
is CuhkCseGuestbookBundle:Default:index
for the route at /
. This refers to indexAction
method in the DefaultController.php
under the controller
directory.Implement the indexAction
and formAction
in src/CuhkCse/GuestbookBundle/Controller/DefaultController
.
<?php
namespace CuhkCse\GuestbookBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;
class DefaultController extends Controller {
public function indexAction() {
return new Response( 'index' );
}
public function formAction() {
return new Response( 'form' );
}
}
The controller methods are very simple. It just use the Symfony object Response
to construct the server response.
Now you can start the server again and visit http://localhost:8000 and http://localhost:8000/form again to test whether the two new routes work.
Sorry that I don't have time to write the remaining part...Please come to the tutorial and I will explain more. I plan to demonstrate the following functions (if time permits):
Message
entity and use the command-line tool to generate the database schemaphp app/console generate:doctrine:entity
php app/console doctrine:schema:update --force --dump-sql