Laravel - call_user_func_array() expects parameter 1 to be a valid callback

24,568

Solution 1

According to your stack trace, Laravel fires the 404 event. That means, your event handler for this throws the error. Furthermore call_user_func' is complaining about a missing functionurl()` in your handler. so it seems to me that the call

echo Request::url();

is the root of all evil here. Remove it and check to see if you still get the error.

Solution 2

Use URI::current() or URI::full() instead of Request::url()

Share:
24,568
Pablo
Author by

Pablo

Web & Mobile Software I am a developer specialized in the creation of customized IT solutions for web and mobile. Always offering user-centric interactive solutions made for you and your business needs. I have been working with the web for over 10+ years. Your needs always first looking to create a long-lasting relationship. Web Frameworks: AngularJS, Angular, Laravel, Meteor, Node.js. Tools & Libraries: Redux, NgRx Responsive Design: Bootstrap, LESS, CSS, HTML Cross Platform Solutions: Ionic, Cordova Programming Languages: JavaScript, PHP, TypeScript Testing: Jasmine, Cucumber, Appium

Updated on August 10, 2020

Comments

  • Pablo
    Pablo over 3 years

    I'm getting this error:

    call_user_func_array() expects parameter 1 to be a valid callback, class 'Symfony\Component\HttpFoundation\LaravelRequest' does not have a method 'url'
    

    The code I'm using is:

    routes.php:

    <?php
    
    Route::post('', 'app@check');
    Route::get('', 'app@check');
    Route::post('game', 'app@game');
    Route::get('game', 'app@game');
    Route::get('terminos', 'app@terminos');
    Route::post('save', 'scores@savescore');
    Route::get('scores', 'scores@scorelist');
    Route::get('scores2468', 'scores@showscores');
    
    
    
    Event::listen('404', function()
    {
        //return Response::error('404');
        echo "Error 404: \n";
        echo Request::url();
    });
    
    Event::listen('500', function()
    {
        return Response::error('500');
    });
    
    
    
    Route::filter('before', function()
    {
        // Do stuff before every request to your application...
    });
    
    Route::filter('after', function($response)
    {
        // Do stuff after every request to your application...
    });
    
    Route::filter('csrf', function()
    {
        if (Request::forged()) return Response::error('500');
    });
    
    Route::filter('auth', function()
    {
        if (Auth::guest()) return Redirect::to('login');
    });
    

    scores.php:

    class Scores_Controller extends Base_Controller {
    
        public $restful = true;    
    
        public function get_showscores()
        {
            // Imprimo pantalla con tabla de resultados
            $regs = array('regs' => Score::order_by('score','desc')->get());
            //dd($regs);
            return View::make('score.show', $regs);
        }    
    
        public function post_savescore()
        {
            // Tomo FacebookSDK instance
            $facebook = IoC::resolve('facebook-sdk');
            $accessToken = $facebook->getAccessToken();
            $user = $facebook->getUser();
            $user_profile = $facebook->api('/me');
    
            if ($user) {
                // Logueado
                $data = Input::all();
                // Guardo un nuevo score
                $score = Score::create(array(
                    'nombre' => $user_profile['name'],
                    'score' => $data['score'],
                    'fbid' => $user_profile['id']
                    ));
    
                return json_encode($score->attributes);
            }else{
                // No hay sesion
                return false;
            }
    
        }    
    
        public function get_scorelist(){
    
            $facebook = IoC::resolve('facebook-sdk');
    
            $scores = Score::order_by('score','desc')->take(10)->get();
    
            $response = array();
            foreach($scores as $sc){
                $ua = $facebook->api('http://www.facebook.com/'.$sc->attributes['fbid']);
                $dat = array(
                    //'name' => $user->name,
                    'nombre' => $sc->attributes['nombre'],
                    'uid' => $sc->attributes['fbid'],
                    'score' => $sc->attributes['score']
                    );
                array_push($response, $dat);
            }
    
            return json_encode($response);
        }
    }
    

    This is part of a facebook app, as you might have noticed. The thing is that when I try to call 'save' route, I get the error posted before.

    The full error description incl. backtrace:

    Unhandled Exception

    Message:

    call_user_func_array() expects parameter 1 to be a valid callback, class 'Symfony\Component\HttpFoundation\LaravelRequest' does not have a method 'url'
    

    Location:

    /www/conamor/htdocs/apps/aventuracenter/pacman/laravel/request.php on line 287
    

    Stack Trace:

    #0 /www/conamor/htdocs/apps/aventuracenter/pacman/laravel/laravel.php(42): Laravel\Error::native(2, 'call_user_func_...', '/www/conamor/ht...', 287)
    #1 [internal function]: Laravel\{closure}(2, 'call_user_func_...', '/www/conamor/ht...', 287, Array)
    #2 /www/conamor/htdocs/apps/aventuracenter/pacman/laravel/request.php(287): call_user_func_array(Array, Array)
    #3 /www/conamor/htdocs/apps/aventuracenter/pacman/application/routes.php(63): Laravel\Request::__callStatic('url', Array)
    #4 /www/conamor/htdocs/apps/aventuracenter/pacman/application/routes.php(63): Laravel\Request::url()
    #5 [internal function]: {closure}()
    #6 /www/conamor/htdocs/apps/aventuracenter/pacman/laravel/event.php(199): call_user_func_array(Object(Closure), Array)
    #7 /www/conamor/htdocs/apps/aventuracenter/pacman/laravel/event.php(124): Laravel\Event::fire('404', Array)
    #8 /www/conamor/htdocs/apps/aventuracenter/pacman/laravel/laravel.php(109): Laravel\Event::first('404')
    #9 [internal function]: Laravel\{closure}('save')
    #10 /www/conamor/htdocs/apps/aventuracenter/pacman/laravel/routing/route.php(163): call_user_func_array(Object(Closure), Array)
    #11 /www/conamor/htdocs/apps/aventuracenter/pacman/laravel/routing/route.php(124): Laravel\Routing\Route->response()
    #12 /www/conamor/htdocs/apps/aventuracenter/pacman/laravel/laravel.php(167): Laravel\Routing\Route->call()
    #13 /www/conamor/htdocs/apps/aventuracenter/pacman/public/index.php(34): require('/www/conamor/ht...')
    #14 {main}
    

    Any ideas? Thanks in advance!