2014-05-21 74 views
0

因爲我是一個完整的新手到Zend框架,這可能是一個總的初學者問題:在ZF2中爲ZfcUser使用Bootstrap Modal?

我做了一些教程,現在我有一個Zend框架骨架應用ZfcUser(和ZfcBase)啓動並運行。 目前爲止一切正常,但我想完成的是登錄和註冊在Bootstrap-Modal-Dialog中打開。

所以現在我看到在./vendor/ZfcUser/config/module.config.php你可以定義路由,但我不知道該怎麼做,當我想要整個對話框「服務」與我的主應用程序的索引(我想我會需要這可讓登錄對話框從應用程序中的任何位置的主菜單中打開)。

那麼有人可以幫助我得到這個工作?我真的不知道如何在所有的啓動和任何幫助,高度讚賞:)

問候

回答

0

Login Widget viewhelper也可能是你在找什麼。在您想要的.phtml模板中,添加viewhelper來呈現登錄表單。

<!-- Modal --> 
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"> 
<div class="modal-dialog"> 
<div class="modal-content"> 
    <div class="modal-header"> 
    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times; </button> 
    <h4 class="modal-title" id="myModalLabel">Modal title</h4> 
    </div> 
    <div class="modal-body"> 
    <?php //Add the Widget to the Modal Body here!?> 
    <?php echo $this->zfcUserLoginWidget(); ?> 
    </div> 
    <div class="modal-footer"> 
    <button type="button" class="btn btn-default" data-dismiss="modal">Close</button> 
    <button type="button" class="btn btn-primary">Save changes</button> 
    </div> 
</div> 

如果你想改變你需要編輯/添加zfcuser.global.php../config/autoload/文件夾和改變widget的模板/取消註釋這下你想要的登錄窗口小部件模板。

'user_login_widget_view_template' => 'your_module/whatever/login.phtml',

+0

我有同樣的想法,但表單提交(即使在失敗的登錄)將關閉彈出窗口並將頁面重定向到默認登錄頁面。這顯然不是預期的行爲。我試圖在登錄按鈕上嘗試ajax調用,這會阻止瀏覽器中的重定向,但是JavaScript控制檯顯示ajax重定向請求。 –

+0

一旦我回到家裏,我將不得不對此進行測試。一個概要必須添加一些事件到moudle.php,像$ e-> getApplication() - > getServiceManager() - > get('ZfcUser \ Authentication \ Adapter \ AdapterChain') - > getEventManager() - > attach('authenticate .fail',函數($ e)){}等 – cptnk

2

如果你想使用仿真模型進行ZfcUser登錄,您需要更改登錄的方式有點。

  1. 您應該使用ZfcUser API調用來驗證登錄,而不是/ user/login頁面上的發佈數據。
  2. 您需要重寫ZfcUser login.html以將表單操作按鈕從提交更改爲簡單按鈕/鏈接綁定到ajax請求。
  3. 呼叫ZfcUserLoginWidget到仿真模型的身體
  4. 表格/ AJAX操作設置爲自定義身份驗證頁面
  5. 凡ZfcUser API調用驗證&成功/失敗返回JSON響應。
  6. ZfcUser驗證沒有更多的自動工作,您需要通過json響應jQuery,Javascript申請。

因此,首先將供應商/ ZfcUser/view/user/login.html複製到模塊/ [YourModule]/view/zfc-user/user/login。PHTML

現在替換提交按鈕與普通按鈕那樣:

<input type="button" value="Sign in" onClick="javascript:verifyLogin(this.form);" /> 
-- 
-- 
<script type="text/javascript"> 
    function verifyLogin(frm) 
    { 
     var data = $(frm).serialize(); 
     $.ajax({ 
       type: "POST", 
       url: "<?php echo $this->url('authurl') ?>", 
       data: data, 
       success: function(resp){ 
        alert(resp.status); 
       }, 
       error: function(resp){ 
       }, 
       dataType: 'json' 
     }); 
    }  
</script> 

您應該添加一個路由authurl爲YourController/authAction

添加到您的html對父模板視圖引導模式:

<button class="btn btn-primary btn-lg" data-toggle="modal" data-target="#myModal"> 
    Login Box 
</button> 

<!-- Modal --> 
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"> 
    <div class="modal-dialog"> 
    <div class="modal-content"> 
     <div class="modal-header"> 
     <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button> 
     <h4 class="modal-title" id="myModalLabel">Modal title</h4> 
     </div> 
     <div class="modal-body"> 
     <?php echo $this->zfcUserLoginWidget(); ?> 
     </div> 
     <div class="modal-footer"> 
     <button type="button" class="btn btn-default" data-dismiss="modal">Close</button> 
     <button type="button" class="btn btn-primary">Save changes</button> 
     </div> 
    </div> 
    </div> 
</div> 

現在YourController/authAction代碼應該像這樣工作:

$request = $this->getRequest(); 

$data = $request->getPost(); 

$this->getRequest()->getPost()->set('identity', $data['identity']); 
$this->getRequest()->getPost()->set('credential', $data['credential']); 


$this->zfcUserAuthentication()->getAuthAdapter()->resetAdapters(); 
$this->zfcUserAuthentication()->getAuthService()->clearIdentity(); 

$adapter = $this->zfcUserAuthentication()->getAuthAdapter(); 

$adapter->prepareForAuthentication($this->getRequest()); 

$auth = $this->zfcUserAuthentication()->getAuthService()->authenticate($adapter); 

if (!$auth->isValid()) { 
    //$this->flashMessenger()->setNamespace('zfcuser-login-form')->addMessage($this->failedLoginMessage); 
    $adapter->resetAdapters(); 

    $response_data = array(
     'status' => 'Failure' 
    ) ; 
} 
else 
{ 
    $response_data = array(
     'status' => 'OK' 
    ) ; 
} 

$response = $this->getResponse(); 
$response->setStatusCode(200); 
$response->setContent(json_encode($response_data)); 
return $response;