Bonjour,
Dans le but d'initier au framework cakePHP, j'ai commençais un petit projet en partant de la doc de cakePHP justement. Je précise que je suis sous cakePHP3.8. J'ai donc développer un petit site où l'on peux poster des articles tout ça tout ça, avec des utilisateurs ect.
Sur ce site, j'aimerai maintenant ajouter la possibilité d'upload une image quand on veut poster un article.
J'ai donc pour l'occasion, créer une page test afin de tester ma fonction upload, fonction qui fonctionne parfaitement.
La voici :
public function upload()
{
if ($this->request->is('post')) {
$myname = $this->request->getData()['file']['name'];
$mytmp = $this->request->getData()['file']['tmp_name'];
$myuser = $this->request->Session()->read('Auth.User.id');
$myext = substr(strrchr($myname, "."), 1);
$mypath = "upload/" . $myname . "." . $myext;
$file = $this->Files->newEntity();
$file->name = $myname;
$file->path = $mypath;
$file->id_users = $myuser;
$file->created_at = date('Y-m-d H:i:s');
if (move_uploaded_file($mytmp, WWW_ROOT . $mypath)) {
$this->Files->save($file);
return $this->redirect(['action' => 'index']);
}
}
}
Maintenant que je sais qu'elle fonctione, j'aimerai donc l'implanter dans la fonction add() qui permet d'ajouter des articles.
Je l'ai implementer comme ceci :
public function add()
{
$article = $this->Articles->newEntity();
if ($this->request->is('post')) {
//Start - Controller Code to handle file uploading
if(!empty($this->request->getData['photo']['name']))
{
$this->Flash->error(__('Impossible d\'ajouter votre photo.'));
$fileName = $this->request->getData()['photo']['name'];
$mytmp = $this->request->getData()['photo']['tmp_name'];
$myext = substr(strrchr($fileName, "."), 1);
$uploadPath = "upload/" . $filename . "." . $myext;
if(move_uploaded_file($mytmp, WWW_ROOT . $uploadPath))
{
//$this->request->getData()['photo'] = $fileName;
$this->Articles->save($article);
}
}
//End
$article = $this->Articles->patchEntity($article, $this->request->getData());
// L'écriture de 'user_id' en dur est temporaire et
// sera supprimé quand nous aurons mis en place l'authentification.
$article->user_id = $this->Auth->user('id');
$article->user_mail = $this->Auth->user('email');
if ($this->Articles->save($article)) {
$this->Flash->success(__('Votre article a été sauvegardé.'));
return $this->redirect(['action' => 'index']);
}
$this->Flash->error(__('Impossible d\'ajouter votre article.'));
}
$tags = $this->Articles->Tags->find('list');
$this->set('tags', $tags);
$this->set('article', $article);
}
Et comme vous vous y attendez, cela ne fonctionne pas dutout !
Je suis actuellement dessus depuis 10h d'affilé, je ne comprend absolument pas pourquoi cela ne fonctionne pas, j'ai essaye enormement de chose mais rien n'y fait.
Des lors que je choisit une image, et que je clic pour ajouter mon article, l'article est bien sauvgarder, mais l'image elle en revanche n'est pas enregistré. J'ai pense que c'est le move_uploaded_file qui ne fonctionne pas, mais je ne sais pas dutout comment y remédier, de plus je n'ai aucun message d'erreur.
Et niveau BDD, le nom de l'image est bien récupérer, quant au path, rien dutout n'est récupérer, alors que sa fonctionne bien sur ma page test.
Donc voila si quelqu'un aurait une idée d'ou sa pourrait venir, il aura absolument toute ma gratitude :)