Voici ce qu'il nous reste à faire :
- Ajouter une image au formulaire d'ajout de film
- faire une page d'accueil avec la liste des derniers films et des derniers acteurs
- faire un module de critique de film
- intégrer un système d'utilisateur pour identifier les personnes autorisées à critiquer les films
- envoyer un mail de confirmation lors de l'inscription
- faire le module de vote sur les critiques
- intégrer un système de commentaire Disqus
Ajouter une image au formulaire d'ajout de film
Pour ce qui est de l'ajout d'un champ d'upload d'image au formulaire, je ne trouve pas ca vraiment extremement pratique... Ca requiert pas mal de code et je pense que ca aurait pu être mieux fait. J'ai été voir sur le site de symfony ou ils parlent de l'upload de fichier mais leur méthode ne m'a pas satisfait, je vais vous présenter ma méthode.
Pour commencer, on va modifier l'entité Movie (/src/Greanstone/GreanstoneHollywebBundle/entity/Movie.php en lui ajoutant un champ picture. On ajoute ces quelques lignes.
/*** @Assert\File(maxSize="6000000")* @ORM\Column(type="string", length=255, nullable=true)*/private $picture; /**
* Set picture** @param string $picture*/public function setPicture($picture) {$this->picture = $picture;}/*** Get picture** @return string*/public function getPicture() {return $this->picture;}
use Symfony\Component\Validator\Constraints as Assert;
$builder->add('title','text')->add('picture')->add('created_at')->add('updated_at')->add('category')->add('actors');
Doctrine2 va nous sauver la vie.
/*** Greanstone\HollywebBundle\Entity\Movie** @ORM\Table()* @ORM\HasLifecycleCallbacks* @ORM\Entity*/class Movie { ...
-
getFullPicturePath // renvoit le chemin complet
de l'image dans le système de fichier
- getUploadRootDir // définit le répertoire d'upload pour le film
- getTmpUploadRootDir // définit le repertoire temporaire
- uploadPicture // permet de téléverser l'image dans le repertoire temporaire (si fim nouveau) ou directement dans le bon repertoire (si mise à jour)
- movePicture // permet de déplacer l'image dans le repertoire nommé de l'identifiant du film
- removePicture //permet de supprimer l'image lors de la suppression du film
public function getFullPicturePath() {
return null === $this->picture ? null : $this->getUploadRootDir(). $this->picture;
}
protected function getUploadRootDir() {
// the absolute directory path where uploaded documents should be saved
return $this->getTmpUploadRootDir().$this->getId()."/";
}
protected function getTmpUploadRootDir() {
// the absolute directory path where uploaded documents should be saved
return __DIR__ . '/../../../../web/uploads/movies/';
}
/**
* @ORM\PrePersist()
* @ORM\PreUpdate()
*/
public function uploadPicture() {
// the file property can be empty if the field is not required
if (null === $this->picture) {
return;
}
if(!$this->id){
$this->picture->move($this->getTmpUploadRootDir(), $this->picture->getClientOriginalName());
}else{
$this->picture->move($this->getUploadRootDir(), $this->picture->getClientOriginalName());
}
$this->setPicture($this->picture->getClientOriginalName());
}
/**
* @ORM\PostPersist()
*/
public function movePicture()
{
if (null === $this->picture) {
return;
}
if(!is_dir($this->getUploadRootDir())){
mkdir($this->getUploadRootDir());
}
copy($this->getTmpUploadRootDir().$this->picture, $this->getFullPicturePath());
unlink($this->getTmpUploadRootDir().$this->picture);
}
/**
* @ORM\PreRemove()
*/
public function removePicture()
{
unlink($this->getFullPicturePath());
rmdir($this->getUploadRootDir());
}
Partie 1 : http://leny-bernard.com/fr/afficher/article/creer-un-site-facilement-en-symfony2
Partie 2 : http://leny-bernard.com/fr/afficher/article/creer-un-site-facilement-en-symfony2-partie-2
Partie 3 : http://leny-bernard.com/fr/afficher/article/creer-un-site-facilement-en-symfony2-partie-3
Partie 4 : http://leny-bernard.com/fr/afficher/article/creer-un-site-facilement-en-symfony2-partie-4


fds


Ajout d'un commentaire :
Bonjour et merci pour ces quatre premières parties ;) ! Impatient de voir la suite :).
Blog passé en favoris car j'attends d'autres retours d'expérience avec joie :D !
Hey,
Merci Vincent ! J'étais en vacances depuis 15 jours, je vais continuer le tutoriel d'içi quelques jours.
A+
Un grand merci a LENNY.
Vivement la suite !
Deja 1 mois et 26 jours depuis le dernier tuto !! et le site n'avance toujours pas... :(
Je n'ai vraiment pas beaucoup de temps ces jours-ci, les tutos devraient reprendre dans 1 mois et demi...
Désolé pour le délai !
Ceci dit, si ca tente quelqu'un d'écrire la suite, ca peut se gérer !
Deja 1 mois et 26 jours depuis le dernier tuto !! et le site n'avance toujours pas... :(
Je n'ai vraiment pas beaucoup de temps ces jours-ci, les tutos devraient reprendre dans 1 mois et demi...
Désolé pour le délai !
Ceci dit, si ca tente quelqu'un d'écrire la suite, ca peut se gérer !
Bonsoir,
petite question, si je veux afficher l'URL de mon fichier dans une vue twig pour pouvoir le télécharger, comment je m'y prends ?
Merci beaucoup :-)
Save my day :) THX
Salut,
Super ton petit script merci du partage.
Par contre j'ai un petit soucis lorsque je veux juste editer un enregistrement dans ma base sans change l'image il me supprime automatiquement l'image.
Aurais tu une idée de comment faire pour qu'il ne supprime pas l'image si elle ne change pas.
Salut,
Super ton petit script merci du partage.
Par contre j'ai un petit soucis lorsque je veux juste editer un enregistrement dans ma base sans change l'image il me supprime automatiquement l'image.
Aurais tu une idée de comment faire pour qu'il ne supprime pas l'image si elle ne change pas.
Salut,
Super ton petit script merci du partage.
Par contre j'ai un petit soucis lorsque je veux juste editer un enregistrement dans ma base sans change l'image il me supprime automatiquement l'image.
Aurais tu une idée de comment faire pour qu'il ne supprime pas l'image si elle ne change pas.
Salut,
Super ton petit script merci du partage.
Par contre j'ai un petit soucis lorsque je veux juste editer un enregistrement dans ma base sans change l'image il me supprime automatiquement l'image.
Aurais tu une idée de comment faire pour qu'il ne supprime pas l'image si elle ne change pas.
Salut,
Super ton petit script merci du partage.
Par contre j'ai un petit soucis lorsque je veux juste editer un enregistrement dans ma base sans change l'image il me supprime automatiquement l'image.
Aurais tu une idée de comment faire pour qu'il ne supprime pas l'image si elle ne change pas.
Salut,
Super ton petit script merci du partage.
Par contre j'ai un petit soucis lorsque je veux juste editer un enregistrement dans ma base sans change l'image il me supprime automatiquement l'image.
Aurais tu une idée de comment faire pour qu'il ne supprime pas l'image si elle ne change pas.
Salut,
Super ton petit script merci du partage.
Par contre j'ai un petit soucis lorsque je veux juste editer un enregistrement dans ma base sans change l'image il me supprime automatiquement l'image.
Aurais tu une idée de comment faire pour qu'il ne supprime pas l'image si elle ne change pas.
Salut,
Super ton petit script merci du partage.
Par contre j'ai un petit soucis lorsque je veux juste editer un enregistrement dans ma base sans change l'image il me supprime automatiquement l'image.
Aurais tu une idée de comment faire pour qu'il ne supprime pas l'image si elle ne change pas.
Cette méthode d'upload d'image est certes plus légère, mais il vaut mieux se fier à celle du Cookbook Symfony2 car elle permet d'éditer les enregistrements sans effacer l'image (bien que je sois d'accord avec toi sur le fait qu'elle aurait pu être mieux construite).
Sinon, dommage que tu te sois arrêté en si bon chemin, ce tuto était très prometteur. ;)