2016-09-15 9 views
5

मेरे पास एक विशेष नियंत्रक क्रिया है जिसे मैं बिना किसी लेआउट के प्रस्तुत करना चाहता हूं।मैं लेआउट के बिना नियंत्रक कार्रवाई कैसे प्रस्तुत करूं?

मैंने नियंत्रक स्तर पर प्लग के बिना प्रस्तुत करने का प्रयास किया, लेकिन यह काम नहीं किया।

defmodule Hello.PageController do 
    use Hello.Web, :controller 

    plug :put_layout, nil 

    def landing(conn, _params) do 
    render conn, "landing.html" 
    end 
end 

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

उत्तर

6

कारण plug :put_layout, nil काम नहीं करता क्योंकि the put_layout plug only considers false to mean "don't use any layout" है। nil किसी भी अन्य परमाणु की तरह व्यवहार किया जाता है और फीनिक्स रेंडर करने के लिए कोशिश करता है nil.html:

MyApp.LayoutView के लिए "nil.html" प्रस्तुत करना नहीं किया जा सका,/2 प्रस्तुत करना या "वेब पर एक टेम्पलेट परिभाषित के लिए एक मिलान खंड को परिभाषित कृपया/टेम्पलेट्स/लेआउट "। निम्नलिखित टेम्पलेट्स संकलित किया गया:

  • app.html

ठीक false उपयोग करने के लिए है:

plug :put_layout, false 

आप कुछ कार्रवाई करने के लिए प्लग सीमित करना चाहते हैं आप कर सकते हैं पास when:

plug :put_layout, false when action in [:index, :show] 
2

आपको केवल put_layout का आह्वान करने और इसे कॉन और झूठा पास करने की आवश्यकता है।

def landing(conn, _params) do 
    conn = put_layout conn, false 
    render conn, "landing.html" 
end 
संबंधित मुद्दे