Vinod VT
Vinod VT

Reputation: 7159

Redirect is not working on Laravel 4

In my controller function I am using a require statement to include a file:

require app_path().'/plivo/plivo.php';

After this statement, I try to redirect from this controller using the following statement:

return Redirect::back()->with('success', 'Note added successfully');

However, this gives me the following error:

Call to undefined method Redirect::back()

How can I redirect from this function?

This is my full code:

public function sendSMS(){
    require app_path().'/plivo/plivo.php';
    $auth_id = "XXXXXXXXXXXX";
    $auth_token = "XXXXXXXXXXXXXXXXXXXXX";
    $p = new \RestAPI($auth_id, $auth_token);

    $params = array(
        'src' => '1XX7XX0',
        'dst' => '91XXXXXXXXX7',
        'text' => 'Test SMS',
        'method' => 'POST'
    );
    $response = $p->send_message($params);
    return Redirect::back()->with('success', 'Note added successfully');
}

Upvotes: 0

Views: 569

Answers (1)

patricus
patricus

Reputation: 62368

This answer assumes that plivo.php is from this git repo.

The issue is that the plivo.php library defines a Redirect class in the global namespace. Because of this, Laravel does not register the global Redirect alias to point to the Illuminate\Support\Facades\Redirect facade.

So, in your final line return Redirect::back()->with(...);, the Redirect class being used is the class defined in the plivo.php library, not Laravel's Illuminate\Support\Facades\Redirect class.

The quickest fix would be to change your line to:

return Illuminate\Support\Facades\Redirect::back()->with('success', 'Note added successfully');

Another option would be to inject Laravel's redirector into your controller, and use that instead of using the facade:

class MyController extends BaseController {

    public function __construct(\Illuminate\Routing\Redirector $redirector) {
        $this->redirector = $redirector;
    }

    public function sendSMS() {
        require app_path().'/plivo/plivo.php';
        //
        return $this->redirector->back()->with('success', 'Note added successfully');
    }
}

A third option would be to update your code to use the plivo composer package, which has a namespace. The updates have been done in the dev branch of the repo, which you can find here. If you did this, you would get rid of your require statement and use the namespaced plivo classes.

Upvotes: 5

Related Questions