5

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!

rmobis
  • 26,129
  • 8
  • 64
  • 65
Pablo
  • 1,173
  • 4
  • 18
  • 46
  • 3
    Which line of code throws that error? – Mike Brant Jul 31 '13 at 21:16
  • This is the url that throws that error: http://www.conamor.org/apps/aventuracenter/pacman/public/index.php/save – Pablo Jul 31 '13 at 23:43
  • Line 63 of `routes.php` seems missing in your question, so I'd say you present incomplete code, especially those parts which are triggering the issue. – hakre Aug 06 '13 at 09:19
  • Which laravel version are you using? You might use static method calls inappropriately and therefore run into this issue. Please provide more reference here why you think your code *should* work. – hakre Aug 06 '13 at 09:22
  • It was working on the app's serve. But when I run the 'save' post request, now it returns that error. And I'm using Laravel 3. – Pablo Aug 06 '13 at 16:18
  • What does your 404 event listener function look like? Should be in routes.php – Johnny Tops Aug 06 '13 at 16:29
  • Just added all routes.php code – Pablo Aug 07 '13 at 00:57
  • Have you looked into the namespaces? Is the callable to `call_user_func_array` correct? because it'll resolve to a class in the current namespace, if not, you'll have use `'\\The\\NameSpace\\Class'` – Elias Van Ootegem Aug 08 '13 at 10:32

2 Answers2

5

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.

ciruvan
  • 5,143
  • 1
  • 26
  • 32
1

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

Amal Murali
  • 75,622
  • 18
  • 128
  • 150
Abishek
  • 11,191
  • 19
  • 72
  • 111