2013-07-29 15 views
8

Mam kontroler, który ma metodę. Kod jest zbyt długi w metodzie, więc umieściłem niektóre kody w innych prywatnych metodach, aby metody stały się zrozumiałe i nie robią z tego bałaganu.Przekierowanie Laravel z prywatnej metody

Teraz, kiedy dostęp do metody publiczne z adresu URL, w zależności od parametrów, to wezwie specyficzną metodę prywatną przetwarzać zadania. Po przetworzeniu zadania chcę przekierować do adresu URL, ale przekierowanie nie działa.

Próbkę mojego kodu jest następujący:

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

Problem polega na tym, powyższe przekierowanie nie działa. Dlaczego? W Codeigniter, kiedy użyłeś redirect, działa nomatter, z którego jest wywoływany.

Jeżeli powyższy przykładowy kod nie jest właściwym sposobem na to, by docenić, jeśli ktoś mógłby mi pokazać, jak to ma być zrobione. Dzięki.

+0

powinien działać - cały czas używam tego typu kodu. Czy dostaję jakieś błędy? co się stanie, jeśli przeniesiesz przekierowanie na początek procesu processJob()? – Laurence

+0

To nie działa. Usunąłem wszystkie inne kody w processJob(), ale utrzymywanie tej linii przekierowań nadal nie działa. Przy okazji, używam L4. – WebNovice

+0

Czy na pewno wywoływane jest processJob? spróbuj dd ("cześć") w processJob - czy widzisz "cześć" ?? – Laurence

Odpowiedz

14

Musisz również zwrócić ten zwrot z .

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

Dzięki, teraz ten działa. Pochodzę z Codeigniter, ale wygląda to dziwnie. – WebNovice

+1

Spójrz na to w ten sposób: Laravel dzwoni do funkcji kontrolera i oczekuje czegoś w zamian, więc wie, co robić dalej. W twoim kodzie 'return Redirect :: to ('some/url');' wraca do miejsca, w którym twoja prywatna funkcja została wywołana, ale nie dociera do Laravel. Tak, brzmi trochę głupio, ale w zasadzie to się dzieje. – mgrueter

2

Można próbować przekierować do innej strony z funkcji publicznej, zgodnie z prywatnej wyniku funkcji (myślę, że to lepsze rozwiązanie, aby Twój kod bardziej czytelny dla człowieka). Ale może działać tak, jak to napisałeś ...

Powiązane problemy