2013-07-29 34 views
8

我有一個控制器有一個方法。該方法中的代碼太長,所以我已經將一些代碼放在了其他私有方法中,以便方法變得可以理解,而不是搞砸了。從私有方法Laravel重定向

現在,當我從URL訪問公共方法時,根據參數,它將調用特定的私有方法來處理作業。作業處理完成後,我想重定向到一個URL,但重定向不起作用。

我的代碼樣本如下:

class SomeClass extends BaseController{ 
    public function getMethodName() 
     { 
      //check the params and choose a private method to call 
      $this->processJob(); 
     } 
    private function processJob() 
    { 
     //process the job and redirect at the end 
     return Redirect::to('some/url'); 
    } 
} 

的問題是,上述重定向不起作用。這是爲什麼?在Codeigniter中,當您使用redirect時,它在任何地方都可以從中調用。

如果上面的代碼示例不是正確的方法,如果有人能告訴我它是如何完成的,將不勝感激。謝謝。

+0

它應該工作 - 我一直使用這種類型的代碼。你有什麼錯誤嗎?如果將重定向移動到processJob()的開始處會發生什麼? – Laurence

+0

它不起作用。我刪除了processJob()中的所有其他代碼,只保留該重定向行,仍然不起作用。順便說一下,我正在使用L4。 – WebNovice

+0

你確定processJob被調用嗎?在processJob中嘗試dd('hi') - 你看到'嗨'? – Laurence

回答

14

你也必須從$this->processJob()返回回報。

class SomeClass extends BaseController{ 
    public function getMethodName() 
    { 
     //check the params and choose a private method to call 
     return $this->processJob(); 
    } 

    private function processJob() 
    { 
    //process the job and redirect at the end 
    return Redirect::to('some/url'); 
    } 
} 
+0

謝謝,現在這個工作。來自Codeigniter,這看起來很奇怪。 – WebNovice

+1

看起來像這樣:Laravel調用你的控制器函數並期待返回的東西,所以它知道下一步該怎麼做。在你的代碼中,返回Redirect :: to('some/url');'返回到你的私有函數被調用的地方,但它不會到達Laravel。是的,聽起來有點愚蠢,但基本上會發生什麼。 – mgrueter

2

根據你的私有函數結果,你可以嘗試從你的公共函數重定向到另一個頁面(我認爲這是一個更好的解決方案,使你的代碼更易於人工讀取)。 但它可以像你寫的那樣工作...