2011-06-21 19 views
0

我正在學習CakePHP。我試圖開發一個登錄系統,但不是使用login.ctp作爲用戶/視圖,而是希望我可以將它用作一個元素,因爲我在其他許多頁面都有登錄表單。我如何在我的users_controller中聲明我的函數login()將只使用該元素。我說因爲我使用了$ this-> render('/ elements/login')並且它確實有效。但是,我的元素login.ctp在我的default.ctp佈局中,因此,我有兩個登錄表單。一個是元素,另一個是我的default.ctp佈局中的內容。CakePHP - 如何使用登錄表單作爲元素

謝謝!

回答

2

佈局適用於頁面的「更大」標記:頭部和元信息,包括「footer」等分析內容。通用內容指針位於中間 - 因此,除非您確實希望在使用該佈局的每個頁面上都包含該表單,否則不需要在佈局中標記任何特定的表單。

這聽起來像你要麼在視圖中調用$ this-> render()? $ this-> render()是一個控制器方法。 $ this-> element是視圖方法。或者你叫$ this-> element('/ elements/login');或者你調用$ this-> element('/ elements/login'); from your login.ctp 查看?這將意味着控制器呈現默認的login.ctp視圖,該視圖稱爲login.ctp元素。

因此你看到了兩個。修復:

要返回除與操作相關的默認視圖(例如您的登錄代碼段)以外的內容,請調用$ this-> render('name/of/whatever');作爲控制器方法的最後一行。它將返回您指定的視圖; set將會傳遞任何變量,就像普通的視圖調用一樣,如果你想要看起來很花哨,可以將佈局指定爲ajax並觀察像$ this-> render('/ elements/login','ajax')這樣的魔法開始。 。如果您需要在單個視圖文件中調用多個元素,請使用$ this-> element('/ fancy/nav/whatever');否則,您可以使用$ this->您也可以根據需要將它們放置在佈局中(導航等)

HTH。 :)

+0

哇!很好的解釋!我從我的控制器調用該元素,這就是爲什麼我有錯誤消息。所以,我必須從我的觀點調用我的元素。太晚了,我很累,但明天我會測試一下,如果我真的得到你的解釋。非常感謝你! –

1

我對我的項目做了同樣的事情,這就是我所做的。

基本上,我創建了一個新的loginElement.ctp並將它放在element文件夾中。我創建了一組新的HTML代碼,這些代碼將適合我希望使用此元素的佈局,然後loginElement.ctp<form然後將數據提交到login action中的users_controller

如果你需要,當我以後回家時,我可以在這裏發佈我的確切代碼。

====================================編輯========= ================================

這是我使用的代碼:

首先,您會注意到登錄表單中的action指向/login

我在/config/routes.php文件設置爲這樣

Router::connect('/login', array('controller' => 'users', 'action' => 'login')); 

那麼其他的代碼如下所示

/views/elements/thinlogin.ctp

<div id="login">     
    <form method="post" action="/login" accept-charset="utf-8" class="formBox"> 
     <fieldset> 
      <input type="hidden" name="_method" value="POST" /> 
     <div class="form-col"> 
      <label for="username" class="lab">Username/Email</label> 
      <input name="data[User][username]" type="text" id="UserUsername" class="input"> 
     </div> 
     <div class="form-col form-col-right"> 
      <label for="password" class="lab">Password</label> 
      <input type="password" name="data[User][password]" id="UserPassword" class="input"> 
     </div> 
     <div class="form-col form-col-submit"> 
      <input name="" value="Login" class="submit" type="submit"> 
     </div>  
     <div class="form-col form-col-check"> 
      <label><input name="remember" class="checkbox" type="checkbox">Remember me on this computer</label> 
     </div>    
     </fieldset> 
    </form> 
</div> 

/views/pages/home.ctp

<div id="home_top_right_top"> 
     <?php 
     if (!$this->Session->check('Auth.User.id')) 
     { 
      echo $this->element('login/thinlogin'); 
     }else{ 
      echo $this->element('login/loggedin'); 
     } 
     ?>   
</div> 
+0

你可以請發佈確切的程序來調用元素文件夾內的login.ctp。 – Anandhan

+0

我已將我的代碼發佈在原始答案中 –