如果你想使用仿真模型進行ZfcUser登錄,您需要更改登錄的方式有點。
- 您應該使用ZfcUser API調用來驗證登錄,而不是/ user/login頁面上的發佈數據。
- 您需要重寫ZfcUser login.html以將表單操作按鈕從提交更改爲簡單按鈕/鏈接綁定到ajax請求。
- 呼叫ZfcUserLoginWidget到仿真模型的身體
- 表格/ AJAX操作設置爲自定義身份驗證頁面
- 凡ZfcUser API調用驗證&成功/失敗返回JSON響應。
- 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">×</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;
我有同樣的想法,但表單提交(即使在失敗的登錄)將關閉彈出窗口並將頁面重定向到默認登錄頁面。這顯然不是預期的行爲。我試圖在登錄按鈕上嘗試ajax調用,這會阻止瀏覽器中的重定向,但是JavaScript控制檯顯示ajax重定向請求。 –
一旦我回到家裏,我將不得不對此進行測試。一個概要必須添加一些事件到moudle.php,像$ e-> getApplication() - > getServiceManager() - > get('ZfcUser \ Authentication \ Adapter \ AdapterChain') - > getEventManager() - > attach('authenticate .fail',函數($ e)){}等 – cptnk