重定向不适用于Laravel 4

时间:2015-05-26 06:40:00

标签: php laravel redirect laravel-4 require

在我的控制器功能中,我使用require语句来包含文件:

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

在此语句之后,我尝试使用以下语句从此控制器重定向:

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

然而,这给了我以下错误:

  

调用未定义的方法Redirect::back()

如何从此功能重定向?

这是我的完整代码:

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');
}

1 个答案:

答案 0 :(得分:5)

此答案假设plivo.php来自this git repo

问题是plivo.php库在全局命名空间中定义了Redirect类。因此,Laravel不会注册全局Redirect别名以指向Illuminate\Support\Facades\Redirect外观。

因此,在最后一行return Redirect::back()->with(...);中,使用的Redirect类是plivo.php库中定义的类,而不是Laravel的Illuminate\Support\Facades\Redirect类。

最快的解决方法是将您的行更改为:

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

另一种选择是将Laravel的重定向器注入您的控制器,并使用它而不是使用外观:

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');
    }
}

第三种选择是更新代码以使用具有命名空间的plivo composer包。更新已在回购的dev分支中完成,您可以找到here。如果你这样做,你将摆脱你的require语句并使用命名空间的plivo类。