A little reminder for the current development.
With this test project : https://github.com/brunomartin/symfony-test
For using SQLite, need to modify conifig/config.yml :
doctrine:
dbal:
pdo_mysql -> pdo_sqlite
path: %kernel.cache_dir%/test.db
>symfony new comptes
>cd comptes/
>php bin/console server:run # to test
>php bin/console generate:controller # to create a controller
>php bin/console doctrine:generate:entity # to create entity
>php bin/console doctrine:database:create
>php bin/console doctrine:schema:update --force
>php bin/console doctrine:schema:validate
Si il y a eu mise à jour des entités :
php bin/console doctrine:generate:entities AppBundle
générera tous les getter et setter pour les champs.
Pour créer des entités à partir de la ligne de commande
bin/console doctrine:generate:entity -n --entity AppBundle:User --fields="name:string(100) age:int sexe:string(1)"
Pour créer des controller à partir de la ligne de commande
bin/console generate:controller -n --controller=AppBundle:User --actions="addUserAction:/add_user:AppBundle:User:add_user.html.twig"
Pour définir des relations entre entités:
class Operation
{
...
/**
* @ORM\ManyToOne(targetEntity="User", inversedBy="operations")
**/
private $user;
...
}
class User
{
…
/**
* @ORM\OneToMany(targetEntity= »Operation », mappedBy= »user »)
* @var Operation[] An ArrayCollection of Operation objects.
**/
private $operations = null;
…
}
Pour générer un form
php bin/console doctrine:generate:form AppBundle:User
Puis dans un action d’un controller
...
use AppBundle\Entity\User;
use AppBundle\Form\UserType;
use Symfony\Component\HttpFoundation\Request;
...
public function addUserAction(Request $request)
{
$em = $this->getDoctrine()->getManager();
$user = new User();
$user->setName(« Bruno »);
$form = $this->createForm(UserType::class, $user);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$user = $form->getData();
$em->persist($user);
$em->flush();
return $this->redirectToRoute(‘homepage’);
}
return $this->render(‘AppBundle:User:add_user.html.twig’, array(
‘form’ => $form->createView(),
));
}
And in the corresponding twig template :
{{ form_start(form) }}
{{ form_widget(form) }}
<input type="submit" value="Create" class="btn btn-default pull-right" />
{{ form_end(form) }}
Pour l’environnement de production :
php bin/console cache:clear --no-warmup --env=prod
php bin/console doctrine:schema:update --force --env=prod
Pour servir le site avec apache, installer libapach2-mod-php, installer le site dans /usr/share, donner les droits suffisants au user www-data, créer une configuration dans site-avaible symfony.conf
<VirtualHost *:80>
ServerName home.brunocsmartin.fr
ServerAlias www.home.brunocsmartin.fr
DocumentRoot /usr/share/symfony/web
<Directory /usr/share/symfony/web>
AllowOverride All
Order Allow,Deny
Allow from all
<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ app.php [QSA,L]
</IfModule>
</Directory>
Alias /symfony /usr/share/symfony/web/
<Directory /usr/share/symfony/web/bundles>
<IfModule mod_rewrite.c>
RewriteEngine Off
</IfModule>
</Directory>
ErrorLog ${APACHE_LOG_DIR}/project_error.log
CustomLog ${APACHE_LOG_DIR}/project_access.log combined
</VirtualHost>
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName home.brunocsmartin.fr
ServerAlias www.home.brunocsmartin.fr
DocumentRoot /usr/share/symfony/web
Alias /symfony /usr/share/symfony/web/
<Directory /usr/share/symfony/web>
Options All
AllowOverride All
Order Allow,Deny
Allow from all
<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ app.php [QSA,L]
</IfModule>
</Directory>
<Directory /usr/share/symfony/bundles>
<IfModule mod_rewrite.c>
RewriteEngine Off
</IfModule>
</Directory>
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/home.brunocsmartin.fr/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/home.brunocsmartin.fr/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/home.brunocsmartin.fr/chain.pem
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
</VirtualHost>
</IfModule>
et appliquer les bonnes permissions :
sudo setfacl -R -m u:www-data:rX /usr/share/symfony/ sudo setfacl -R -m u:www-data:rwX /usr/share/symfony/ sudo setfacl -dR -m u:www-data:rwX /usr/share/symfony/