Laravel 5

Comment générer 2 fichiers Word dans une page en utilisant PhpWord?

Avatar de SaliouMballo
SaliouMballo

Bonjour la communauté. Bon début de semaine à toute et à tous! Je viens vers vous solliciter votre aide sur un sujet qui me préocuppe depuis un certain temps et que je n'arrive pas à résoudre. En fait j'ai un projet sur Laravel dans lequel j'ai des formulaires à remplir et sur la base de ces informations reçues des formulaires, je génère des fichiers Word qui recupèrent les variables. Jusque-là j'arrive à le faire (générer un fichier Word) pour un seul fichier. Le problème c'est quand je voudrais le faire pour un deuxième fichier.

Mon controller qui permet de générer le fichier Word:

                public function edit(Stagiaire $stagiaire, $downloadName = null)
{
    $id = $stagiaire ->id;
    $desc1 = Stagiaire::find($id);

    $my_template = new \PhpOffice\PhpWord\TemplateProcessor(public_path('attestationStage.docx'));

    $my_template->setValue('id', $desc1->id);
    $my_template->setValue('civilite', $desc1->civilite);
    $my_template->setValue('prenoms', $desc1->prenoms);
    $my_template->setValue('nom', $desc1->nom);
    $my_template->setValue('date_de_naissance', $desc1->date_de_naissance);
    $my_template->setValue('lieu_de_naissance', $desc1->lieu_de_naissance);
    $my_template->setValue('poste', $desc1->poste);
    $my_template->setValue('date_dentree', $desc1->date_dentree);
    $my_template->setValue('direction', $desc1->direction);
    $my_template->setValue('type_contrat', $desc1->type_contrat);
    $my_template->setValue('duree_contrat', $desc1->duree_contrat);
    $my_template->setValue('date_debut_contrat', $desc1->date_debut_contrat);
    $my_template->setValue('date_fin_contrat', $desc1->date_fin_contrat);
    $my_template->setValue('matricule', $desc1->matricule);
    $my_template->setValue('classe', $desc1->classe);
    $my_template->setValue('echelon', $desc1->echelon);
    $my_template->setValue('dernier_diplome', $desc1->dernier_diplome);
    $my_template->setValue('dernier_etablissement', $desc1->dernier_etablissement);
    $my_template->setValue('annee_dernier_diplome', $desc1->annee_dernier_diplome);
    $my_template->setValue('indemnite', $desc1->indemnite);


    $my_template->setValue('date_enregistrement', $desc1->date_enregistrement);
    $my_template->setValue('lieu_enregistrement', $desc1->lieu_enregistrement);


    $first_name = $stagiaire->prenoms ;
    $last_name = $stagiaire->nom ;
    $filename = "Attestation Stagiaire de "." ".  $first_name. " ". $last_name;

    try{
        $my_template->saveAs(storage_path("$filename.docx"));
    }catch (Exception $e){
        //handle exception
    }
    $downloadName = $downloadName??$filename;

    return response()->download(storage_path("$filename.docx"));

}



Ce controller me permet d'avoir un premier fichier Word et jusque-là ça marche à merveille mais le problème c'est que je n'arrive pas à utiliser un autre controller sur la même page pour générer un deuxième fichier.

Besoin d'aide SVP.
Merci d'avance!
Posté il y a 1 mois
Avatar de CinquièmeDimension
CinquièmeDimension

Salut,

Je ne comprends pas bien ce que tu veux faire mais si tu veux utiliser la méthode d'un autre controller, tu devrais pouvoir y arriver en faisant un

use App\Http\Controllers\tonController; puis tonController::methode();

Posté il y a 1 mois
Avatar de SaliouMballo
SaliouMballo

Salut CinquièmeDimension, En fait pour générer un fichier Word en utilisant la bibliothèque PhpWord on doit normalement passer par un controller: c'est ce que j'ai fait avec le premier document que je parviens à générer actuellement grace au public function edit { }. Maintenant pour un deuxième document j'essaie de passer par un autre controller mais j'ai une erreur : Not found.
Pour être plus simple, est-ce possible de générer deux fichiers word en utilisant la bibliothèque PhpWord, avec des variables provenant d'une même table?

Merci poiur la réactivité!

Posté il y a 1 mois
Avatar de CinquièmeDimension
CinquièmeDimension

T'as un not found sur quoi ? C'est quoi ton erreur ?

Je ne vois aucun problème a créer 2 fichiers, soit en appelant la méthode d'un autre controller comme tu l'as dit, soit en faisant un autre

$my_template_bis = new \PhpOffice\PhpWord\TemplateProcessor(public_path('euxièmeFichier.docx'));
    $my_template->setValue('id', $desc1->id);
    [etc.]

avant ton return.

Si tu bloque, essaie de nous donner plus de details (la méthode de l'autre controller que tu essaie d'appeler, l'erreur complète, etc.)

Posté il y a 1 mois
Avatar de SaliouMballo
SaliouMballo

Merci pour la réactivité CinquièmeDimension.

Voici le code de la deuxième méthode du controller que j'ai utilisée

    public function massDestroy(Stagiaire $stagiaire, $downloadName = null)
{
    $id = $stagiaire ->id;
    $desc1 = Stagiaire::find($id);

    $my_template = new \PhpOffice\PhpWord\TemplateProcessor(public_path('attestationStage.docx'));

    $my_template->setValue('id', $desc1->id);
    $my_template->setValue('civilite', $desc1->civilite);
    $my_template->setValue('prenoms', $desc1->prenoms);
    $my_template->setValue('nom', $desc1->nom);
    $my_template->setValue('date_de_naissance', $desc1->date_de_naissance);
    $my_template->setValue('lieu_de_naissance', $desc1->lieu_de_naissance);
    $my_template->setValue('poste', $desc1->poste);
    $my_template->setValue('date_dentree', $desc1->date_dentree);
    $my_template->setValue('direction', $desc1->direction);
    $my_template->setValue('type_contrat', $desc1->type_contrat);
    $my_template->setValue('duree_contrat', $desc1->duree_contrat);
    $my_template->setValue('date_debut_contrat', $desc1->date_debut_contrat);
    $my_template->setValue('date_fin_contrat', $desc1->date_fin_contrat);
    $my_template->setValue('matricule', $desc1->matricule);
    $my_template->setValue('classe', $desc1->classe);
    $my_template->setValue('echelon', $desc1->echelon);
    $my_template->setValue('dernier_diplome', $desc1->dernier_diplome);
    $my_template->setValue('dernier_etablissement', $desc1->dernier_etablissement);
    $my_template->setValue('annee_dernier_diplome', $desc1->annee_dernier_diplome);
    $my_template->setValue('indemnite', $desc1->indemnite);
    $my_template->setValue('date_enregistrement', $desc1->date_enregistrement);
    $my_template->setValue('lieu_enregistrement', $desc1->lieu_enregistrement);


    $first_name = $stagiaire->prenoms ;
    $last_name = $stagiaire->nom ;
    $filename = "Attestation Stagiaire de "." ".  $first_name. " ". $last_name;

    try{
        $my_template->saveAs(storage_path("$filename.docx"));
    }catch (Exception $e){
        //handle exception
    }
    $downloadName = $downloadName??$filename;

    return response()->download(storage_path("$filename.docx"));

}

L'erreur c'est que quand je clique sur le bouton qui doit exécuter cette action, ça me redirige vers le lien: http://localhost/E-Form/admin/stagiaires/destroy?22 et comme message d'erreur "Not found" alors que ça devait procéder au téléchargement du fichier

Posté il y a 1 mois
Avatar de CinquièmeDimension
CinquièmeDimension

Il n'y a pas d'autre indication que not found (genre xxx not found) ?

Je crois voir une erreur avec tes storage_path("$filename.docx"); Je ne suis pas certain s'il enregistre le nom de ta variable ou carrement le string "$filename.docx".

Tu devrais commencer par handle l'exception. Tui met à la rigueur un dd($e) dans ton catch() pour être certain qu'il n'y a pas d'erreur. Parceque s'il y a une erreur, tu ne le sais pas et la fonction continue de tourner...

J'au fait juste ce petit ajustement pour voir:

$filename = "Attestation_Stagiaire_de_"."_".  $first_name. "_". $last_name.".doc";//j'ai enlevé les espaces qui peuvent être problématiques... attention au éventuels accents aussi

    try{
        $my_template->saveAs(storage_path($filename.docx));
    }catch (Exception $e){
        dd($e);
    }
    $downloadName = $downloadName??$filename;// ça je ne sais pas trop à quoi ca sert

    return response()->download(storage_path($filename.docx));
Posté il y a 1 mois
Avatar de SaliouMballo
SaliouMballo

Merci beaucoup pour ton aide CinquièmeDimension. J'apprécie vraiment Mais le problème ne vient pas de storage_path("$filename.docx"); . Ce code marche trés bien avec le premier document que je télécharge. Seulement je crois avoir compris que PhpWord ne permet pas de recuperer l'ID d'une variable dans deux templates differents. J'espère me tromper?

Posté il y a 1 mois
Avatar de CinquièmeDimension
CinquièmeDimension

Encore une fois quel est le texte précis de ton erreur ? Qu'est-ce qui est not found ? J'ai remarqué également que t'as un espace dans $stagiaire ->id; je ne sais pas si c'est top.

Posté il y a 1 mois

Vous ne pouvez pas répondre à ce sujet.