2014-08-30 13 views
6

मेरे पास यह ब्लॉग नियंत्रक है, निर्माण कार्य निम्नानुसार है।रिटर्न स्टेटमेंट के बिना लार्वेल में रीडायरेक्शन

public function create() { 
    if($this->reqLogin()) return $this->reqLogin(); 
    return View::make('blogs.create'); 
} 

BaseController में, मैं इस समारोह जो करता है, तो उपयोगकर्ता के प्रवेश की जांच करे।

public function reqLogin(){ 
     if(!Auth::check()){ 
     Session::flash('message', 'You need to login'); 
     return Redirect::to("login"); 
     } 
    } 

इस कोड को ठीक काम कर रहा है, लेकिन यह क्या जरूरत मैं चाहता हूँ मेरी समारोह बनाने के इस प्रकार है नहीं है।

public function create() { 
    $this->reqLogin(); 
    return View::make('blogs.create'); 
} 

क्या मैं ऐसा कर सकता हूं?

इसके अलावा, क्या मैं Yii ढांचे में नियंत्रक के शीर्ष पर लिखने के नियमों को सेट कर सकता हूं।

+0

वाईआई लार्वेल के बराबर नहीं है। क्यों Yii टैग करें। – crafter

+0

मुझे किसी ऐसे व्यक्ति का उत्तर चाहिए जिसने दोनों पर काम किया है। – anwerj

उत्तर

2

आपको चेक को एक फ़िल्टर में रखना चाहिए, फिर उपयोगकर्ता को केवल नियंत्रक के पास पहुंचने दें यदि वे पहले स्थान पर लॉग इन हैं।

फ़िल्टर

Route::filter('auth', function($route, $request, $response) 
{ 
    if(!Auth::check()) { 
     Session::flash('message', 'You need to login'); 
     return Redirect::to("login"); 
    } 
}); 

मार्ग

Route::get('blogs/create', array('before' => 'auth', 'uses' => '[email protected]')); 

नियंत्रक

public function create() { 
    return View::make('blogs.create'); 
} 
+0

यह काम करता है !, तो क्या मुझे हर क्रिया के लिए मार्ग जोड़ने की ज़रूरत है जिसके लिए मुझे प्राधिकरण की आवश्यकता है? – anwerj

+0

लार्वेल दस्तावेज़ों में रूट :: समूह() देखें। मूल रूप से एक साथ प्राधिकृत मार्गों का एक "समूह" बनाते हैं। – Laurence

8

बेहतर Laravel की वास्तुकला फिट करने के लिए अपने कोड के आयोजन के अलावा, वहाँ एक छोटे चाल जब लौटने के जवाब में है आप उपयोग कर सकते हैं संभव नहीं है और एक पुनर्निर्देशन की बिल्कुल आवश्यकता है।

चाल \App::abort() पर कॉल करने और अनुमोदन कोड और शीर्षलेख पास करने के लिए है। यह परिस्थितियों (छोड़कर, विशेष रूप से, ब्लेड विचारों और __toString() तरीकों के अधिकांश में काम करेंगे।

यहाँ एक सरल समारोह है कि हर जगह काम करेंगे, कोई बात नहीं क्या, जबकि अभी भी अपने बंद तर्क को हाथ लगाए बिना

PHP में
/** 
* Redirect the user no matter what. No need to use a return 
* statement. Also avoids the trap put in place by the Blade Compiler. 
* 
* @param string $url 
* @param int $code http code for the redirect (should be 302 or 301) 
*/ 
function redirect_now($url, $code = 302) 
{ 
    try { 
     \App::abort($code, '', ['Location' => $url]); 
    } catch (\Exception $exception) { 
     // the blade compiler catches exceptions and rethrows them 
     // as ErrorExceptions :(
     // 
     // also the __toString() magic method cannot throw exceptions 
     // in that case also we need to manually call the exception 
     // handler 
     $previousErrorHandler = set_exception_handler(function() { 
     }); 
     restore_error_handler(); 
     call_user_func($previousErrorHandler, $exception); 
     die; 
    } 
} 

उपयोग:

redirect_now('/'); 

ब्लेड में उपयोग:

{{ redirect_now('/') }} 
+0

धन्यवाद @alexxali – tacone

+0

'\ App :: abort ($ code); 'बढ़िया काम करता है! +1 धन्यवाद! :) – emotality

संबंधित मुद्दे