ZendFramework1.12.20にて、ログインページを作っています。
その中で、ボタンを押すと認証を行うActionコントローラを使用したいのですが、対象が見つからずエラーになります。
ログインページまでは表示されますが、ボタン押下後の画面変遷で下記のエラーがでます。
<form>タグ内でのジャンプ先の指定方法が間違っているのでしょうか。AuthControllerにて認証済みか確認し、ログインページ・TOPページのどちらかを表示させる単純なものです。
また、テンプレートを利用するSmartyを画面表示に使っています。
ZendFrameworkを利用してのコーディングは初めてです。
不足な点などありましたらご指摘お願いします。
表示されるエラー
Not Found
The requested URL /sample/chap5/auth/process/ was not found on this server.
該当部分のコード
index.tpl
PHP
1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4<meta charset="UTF-8"> 5<meta name = "format-detection" content = "telephone=no"> 6 7</head> 8 9 <body class="ui-mobile-viewport"> 10 <div data-role="header" class="ui-header ui-bar-a" role="banner"> 11 <h1 class="ui-title" tabindex="0" role="heading" aria-level="1">ログイン</h1> 12 </div> 13<br> 14{$module} 15<br> 16 <form class="" id="loginForm" name="form1" action="{$base}/auth/process" method="post"> 17 <div class = "display-center"> 18 <tr height=30px> 19 <th width=100 class="display-center">USER</th> 20 <td width=80><input type="text" name="uid" style="width:120px; height:10px; font-size: 15px;" required></td> 21 </tr> 22 <br> 23 <tr height=30px> 24 <th width=100 class="display-center">PASS</th> 25 <td width=80><input type="password" name="passwd" style="width:120px; height:10px; font-size: 15px;" required></td> 26 </tr> 27 <br> 28 <div class="display-center"> 29 <br> 30 <button type="submit" name="submit" value="ログイン" class="moveButton">ログイン</button> 31 <br> 32 <br> 33 </div> 34 </form> 35 </div> 36 </body> 37</html>
AuthPlugin.class.php
PHP
1<?php 2require_once 'Zend/Controller/Plugin/Abstract.php'; 3require_once 'Zend/Auth.php'; 4 5class AuthPlugin extends Zend_Controller_Plugin_Abstract { 6 public function dispatchLoopStartup($req) { 7 8 $sess = new Zend_Session_Namespace('management'); 9 if(!$sess->isLogined){ 10 11 // /default/auth/processでない場合に、転送処理を行う。 12 if($req->getModuleName() != 'default' || $req->getControllerName() != 'auth' || 13 $req->getActionName() != 'process') { 14 15 // セッション情報に「モジュール/コントローラ/アクション名」を保存する 16 $sess->currentModule = $req->getModuleName(); 17 $sess->currentController = $req->getControllerName(); 18 $sess->currentAction = $req->getActionName(); 19 20 // 「default/auth/index」を設定する 21 $req->setModuleName('default'); 22 $req->setControllerName('auth'); 23 $req->setActionName('index'); 24 25 } 26 } 27 } 28}
AuthController.php
PHP
1<?php 2require_once 'Zend/Auth.php'; 3require_once 'Zend/Auth/Adapter/DbTable.php'; 4require_once 'Zend/Controller/Action.php'; 5require_once 'Zend/Session/Namespace.php'; 6require_once 'Zend/Db/Adapter/Pdo/Ibm.php'; 7 8class AuthController extends Zend_Controller_Action { 9 10 public function indexAction(){ 11 12 $s = new MySmarty; 13 14 $s->assign('error', ' '); 15 16 $s->simpleDisplay($this->getRequest()); 17 18 } 19 20 public function processAction(){ 21 22 $req = $this->getRequest(); 23 24 $postUser = $req->getPost('uid'); 25 $postPass = $req->getPost('passwd'); 26 27 28 // ログイン情報DB参照 29 $db = new DbManager('LOGINP'); 30 31 $where = array(); 32 $target = array(); 33 $row = array(); 34 35 //取得値 36 $target['USERCD = ?'] = 'RTRIM(CAST( USERCD AS CHAR(12) )) AS USERCD'; 37 $target['USERNM = ?'] = 'RTRIM(CAST( USERNM AS CHAR(120) )) AS USERNM'; 38 39 //条件 40 $where['USERCD = ?'] = $postUser; 41 $where['PASS = ?'] = $postPass; 42 43 $db->setSelect($where, $target); 44 45 $row = $db->fetchRow(); 46 47 if(!empty($row)) { 48 49 $sess = new Zend_Session_Namespace('management'); 50 51 $sess->setExpirationSeconds(3600); // 60分に設定 52 $sess->isLogined = TRUE; 53 $sess->uid = $postUser; 54 $sess->pass = $postPass; 55 $sess->name = $row['USERNM']; 56 57 $action = $sess->currentAction; 58 $controller = $sess->currentController; 59 $module = $sess->currentModule; 60 61 $sess->currentAction = NULL; 62 $sess->currentController = NULL; 63 $sess->currentModule = NULL; 64 65 $this->_redirect('/'.$module.'/'.$controller.'/'.$action); 66 67 } else { 68 69 $res = $this->getResponse(); 70 $this->getRequest()->setActionName('index'); 71 72 $s->assign('error','ユーザIDまたはパスワードが違います。'); 73 74 $s->simpleDisplay($this->getRequest()); 75 76 } 77 } 78 79 80 public function logoutAction() { 81 82 Zend_Session::destroy(); 83 84 $this->_redirect('/index/index'); 85 86 } 87} 88
あなたの回答
tips
プレビュー