83 votes

Appeler une autre fonction dans le même contrôleur ?

J'ai ce contrôleur, et le function read($q) Retourner l'erreur Call to undefined function sendRequest()

<?php

class InstagramController extends BaseController {

/*
|--------------------------------------------------------------------------
| Default Home Controller
|--------------------------------------------------------------------------
|
| You may wish to use controllers instead of, or in addition to, Closure
| based routes. That's great! Here is an example controller method to
| get you started. To route to this controller, just add the route:
|
|   Route::get('/', 'HomeController@showWelcome');
|
*/

public function read($q)
{
    $client_id = 'ea7bee895ef34ed08eacad639f515897';

    $uri = 'https://api.instagram.com/v1/tags/'.$q.'/media/recent?client_id='.$client_id;
    return sendRequest($uri);
}

public function sendRequest($uri){
    $curl = curl_init($uri);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
    $response = curl_exec($curl);
    curl_close($curl);
    return $response;
}

}

Je suppose que c'est parce que je fais référence à la fonction de la mauvaise manière, mais je ne trouve aucune explication sur la façon de procéder.

189voto

haim770 Points 11507

Essayez :

return $this->sendRequest($uri);

Comme PHP n'est pas un langage purement orienté objet, il interprète le sendRequest() comme une tentative d'invocation d'une fonction définie globalement (tout comme le nl2br() par exemple), mais comme votre fonction fait partie d'une classe ( InstagramController ), vous devez utiliser $this pour orienter l'interprète dans la bonne direction.

18voto

QArea Points 1991

Oui. Le problème réside dans la mauvaise notation. Utiliser :

$this->sendRequest($uri)

Au lieu de cela. Ou

self::staticMethod()

pour les méthodes statiques. Lisez aussi ceci pour vous faire une idée de la POO - http://www.php.net/manual/en/language.oop5.basic.php

1voto

Imad Ullah Points 87

Vous pouvez appeler la méthode avec $this->methodNameYouWantToCall($thing_you_want_to_pass) .

Dans votre cas, vous pouvez faire quelque chose comme ceci : ......

return $this->sendRequest($uri);

-3voto

kitListner Points 7

Pour appeler une fonction à l'intérieur d'un même contrôleur dans n'importe quelle version de Laravel, procédez comme suit

$role = $this->sendRequest('parameter');
// sendRequest is a public function

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X