Bonjour,

Voila je rencontre un petit problème avec mon code.

Ce que je fais

J'ai créé une fonction personnalisée dans le fichier existant helpers.php

    function echoit($string)
                {
                    echo $string;

                }

Dans mon controller j'ai un code qui me permet d'envoyer un email automatique

    $email_sender = $this->echoit(Input::get('email'));

            Mail::queue('emails.share', $data, function($message) use ($emails, $email_sender)

            {

        $message->from($email_sender, Input::get('name'));

            foreach ($emails as $email) {
            $message->to($email)->bcc('contact@mon domaine.fr')->subject('[content n°'.Input::get('id').'] mon objet');
            }
            });

Ce que je veux

Utiliser la fonction echo dans mon controller.

Ce que j'obtiens

J'obstiens le message d'erreur suivant :
Method [echoit] does not exist.

9 réponses


Essaye de mettre directement ecoit(...) et pas $this->echoit(...)

cfor
Auteur

Oui je l'avais déjà fait, voici le message que j'obtiens :
Undefined variable: email_sender

Je précise que Input::get('email') est bien une valeur d'entrée récupérée dans le processus.

echo $string;
Affiche quelque chose à l'écran

Si tu veux faire que la fonction retourne la valeur tu dois faire
return $string;

C'est complètement illogique et inutile de faire une fonction qui returne un echo... Autant faire echo directement.

Ensuite dans un controller on ne fait pas de echo, on retourne des éléments à afficher dans une vue, donc tu dois faire une return. Si tu veux débuguer tu peux utiliser la function dd($machin) de Laravel, ou dump() pour remplacer le var_dump

cfor
Auteur

Oui c'est nul en effet ! mon soucis est d'ordre technique en fait. Si je fais passer l'expéditeur en tant que variable comme suit

->from($email_sender, ...)

Le destinataire ne reçoit pas l'email.
En revanche, si je fais passer la valeur comme suit :

->from('prenom.nom@yahoo.fr', ...)

Ca passe.
J'ai écumé les forums sur le sujet. Cela peut avoir plusieurs origines dont le fournisseur du service (hébergeur) par exemple
Bref, j'ai résolu la question en renoncant à afficher l'email de l'expéditeur mais plutot un email générique 'no-reply@mpndomaine.fr' et son nom en second paramètre de l'instruction.

Et tu as essayé d'assigner clairement $email_sender = 'prenom[@]oo.fr' car avec ta fonction echoit qui n'avait pas de return, ta variable était null.

Et tout simplement

$message->from(Input::get('email'), Input::get('name'));

Et le get serait plutôt un post à mon avis (enfin plus logique... mais tout dépend de ton traitement du formulaire)

Salut,

C'est une très mauvaise idée d'inclure des fonctions perso dans le helpers.php de Laravel car dès que tu mettra à jour ton FW, il sera effacé et tu perdra toutes tes fonctions.

Si je dit pas de bétise, Input::get('email') renvoi déjà ton élément en format string. Donc inutile de faire une fonction pour ça.

Après je ne sais pas si tu utilise la bonne fonction. Car tu es un peu flou sur le process que tu souhaite réaliser.