2015-08-25 2 views
0

Я использую Laravel 5, я просто хочу знать, как использовать или объявлять пользовательскую функцию внутри моего контроллера. У меня естьИспользование пользовательской функции в контроллере Laravel 5

class UploadController extends Controller 
{ 
    function on_request_done($content, $url, $ch, $search) { 

    $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);  
    if ($httpcode !== 200) { 
     print "Fetch error $httpcode for '$url'\n"; 
     return; 
    } 
    $responseobject = json_decode($content, true); 
    if (empty($responseobject['responseData']['results'])) { 
     print "No results found for '$search'\n"; 
     return; 
    } 
    print "********\n"; 
    print "$search:\n"; 
    print "********\n"; 
    $allresponseresults = $responseobject['responseData']['results']; 
    foreach ($allresponseresults as $responseresult) { 
     $title = $responseresult['title']; 
     print "$title\n"; 
    } 
    } 
} 

И всякий раз, когда я называю on_request_done внутри одной из моих функций, скажем,

public function getParallelApi() 
{ 
    define ('SEARCH_URL_PREFIX', 'http://ajax.googleapis.com/ajax/services/search/web?v=1.0&rsz=large&filter=0'); 
    $terms_list = array(
     "John", "Mary", 
     "William", "Anna", 
     "James", "Emma", 
     "George", "Elizabeth", 
     "Charles", "Margaret", 
     "Frank", "Minnie", 
     "Joseph", "Ida", 
     "Henry", "Bertha", 
     "Robert", "Clara", 
     "Thomas", "Alice", 
     "Edward", "Annie", 
     "Harry", "Florence", 
     "Walter", "Bessie", 
     "Arthur", "Grace", 
     "Fred", "Ethel", 
     "Albert", "Sarah", 
     "Samuel", "Ella", 
     "Clarence", "Martha", 
     "Louis", "Nellie", 
     "David", "Mabel", 
     "Joe", "Laura", 
     "Charlie", "Carrie", 
     "Richard", "Cora", 
     "Ernest", "Helen", 
     "Roy", "Maude", 
     "Will", "Lillian", 
     "Andrew", "Gertrude", 
     "Jesse", "Rose", 
     "Oscar", "Edna", 
     "Willie", "Pearl", 
     "Daniel", "Edith", 
     "Benjamin", "Jennie", 
     "Carl", "Hattie", 
     "Sam", "Mattie", 
     "Alfred", "Eva", 
     "Earl", "Julia", 
     "Peter", "Myrtle", 
     "Elmer", "Louise", 
     "Frederick", "Lillie", 
     "Howard", "Jessie", 
     "Lewis", "Frances", 
     "Ralph", "Catherine", 
     "Herbert", "Lula", 
     "Paul", "Lena", 
     "Lee", "Marie", 
     "Tom", "Ada", 
     "Herman", "Josephine", 
     "Martin", "Fanny", 
     "Jacob", "Lucy", 
     "Michael", "Dora", 
    ); 

    if (isset($argv[1])) { 
    $max_requests = $argv[1]; 
    } else { 
     $max_requests = 10; 
    } 

    $curl_options = array(
     CURLOPT_SSL_VERIFYPEER => FALSE, 
     CURLOPT_SSL_VERIFYHOST => FALSE, 
     CURLOPT_USERAGENT, 'Parallel Curl test script', 
    ); 

    $parallel_curl = new ParallelCurl($max_requests, $curl_options); 

    foreach ($terms_list as $terms) { 
     $search = '"'.$terms.' is a"'; 
     $search_url = SEARCH_URL_PREFIX.'&q='.urlencode($terms); 
     $parallel_curl->startRequest($search_url, 'on_request_done', $search); 
    } 


    $parallel_curl->finishAllRequests(); 

    //return "Helloo"; 
} 

Я получаю

call_user_func() expects parameter 1 to be a valid callback, function 'on_request_done' not found or invalid function name

Мой маршрут

Route::get('/parallelapi', '[email protected]'); 

ПОЖАЛУЙСТА ЗАМЕТЬТЕ, ЧТО getParallelApi() находится под номером UploadController.

+0

Вы находитесь внутри класса, попробуйте использовать 'this -> on_request_done()' вместо этого. – mdamia

ответ

0

Проблема заключается в том, что вы передаете имя функции, но не понимаете, какой класс существует в этой функции. Вы должны иметь возможность сделать это, передав массив как ваш обратный вызов, при этом первый элемент является экземпляром ваш контроллер, а второй элемент - имя функции.

$parallel_curl->startRequest($search_url, [$this, 'on_request_done'], $search); 
+0

Спасибо! отлично работает сейчас :) – jackhammer013

Смежные вопросы