2013-07-29 9 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が呼び出されていますか? dd( 'hi')をprocessJobで試してください - あなたは '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はコントローラの関数を呼び出し、何かを返すので、次に何をするかを知っています。あなたのコードでは、 'return Redirect :: to( 'some/url');はあなたのプライベート関数が呼び出された場所に返されますが、Laravelには届きません。はい、少し馬鹿だと思いますが、基本的には何が起こるのですか。 – mgrueter

2

プライベート関数の結果に従って、パブリック関数から別のページにリダイレクトしようとすることができます(コードを人間が読めるようにするためのより良い解決策だと思います)。 しかし、それはあなたが書いたように動作する可能性があります...

関連する問題