2015-05-26 52 views
0

工作在我的控制器功能我使用的是require语句包含一个文件:重定向未在Laravel 4

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

这一说法后,我尝试使用下面的语句从该控制器来重定向:

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

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

Call to undefined method 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'); 
} 
+0

您的代码名称空间是?试试'return \ Redirect :: back()...'? – Laurence

+0

@TheShiftExchange我也试过这个。不工作 –

+0

嗨@Vinod VT你的控制器看起来更清洁,如果你将plivo及其方法移动到一个包中。我可以看到它是一个短信网关。 https://www.plivo.com。我为我使用的SMS网关创建了一个包,它使我可以像这样做'Sms :: send('080000000','message'); “我真的认为你应该这样做 – Digitlimit

回答

5

这个回答假设plivo.phpthis 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类。