質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Zend Framework

Zend Frameworkは、PHP5で記述されたWebアプリケーションフレームワークです。Zend Frameworkには守らなければならない開発の規定というものは存在せず、MVCなどの複数のコンポーネントを提供しています。

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

Q&A

0回答

1732閲覧

Zend_Authによるログイン認証機能を実装したい

Melancholic

総合スコア3

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Zend Framework

Zend Frameworkは、PHP5で記述されたWebアプリケーションフレームワークです。Zend Frameworkには守らなければならない開発の規定というものは存在せず、MVCなどの複数のコンポーネントを提供しています。

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

0グッド

0クリップ

投稿2020/06/21 11:23

編集2020/06/21 11:25

ZendFrameworkを利用した、ログインページを作成しようとしています。

大まかな流れは、以下のようなオーソドックスなものなのですが、
ログインボタン押下後、上手くAuthController.php内のprocessアクションへのジャンプができません。

動作環境はCentOS7.8です、ZendFrameworkはver1.12.20を導入しています。

ZendFrameworkを使用するのが初めてのため、参考コードを真似するのが精いっぱいでした。
みなさんのお力添えをいただけますと幸いです。

表示されるエラー

Not Found
The requested URL /INDEX/MENU0/default/auth/process was not found on this server.

参考にしたもの

今日から使えるPHP5 サンプル集(下記リンクP.292から)
リンク内容

ディレクトリ構成

/application   /default /views /Smarty /templates /index index.tpl /auth index.tpl /templates_c /controllers IndexController.php AuthController.php /log MySmarty.class.php GetLog.class.php DbManager.class.php AuthPlugin.class.php /INDEX /MENU0 /log /common /js /css index.php .htaccess

ログイン認証に関わるコード

①AuthPlugin.php

PHP

1<?php 2class AuthPlugin extends Zend_Controller_Plugin_Abstract { 3 4 // ディスパッチループを開始する 5 public function dispatchLoopStartup($req) { 6 7 // セッション情報を管理する 8 $sess = new Zend_Session_Namespace('management'); 9 10 // 既にログイン済みか確認し、未認証の場合 11 // 以下の処理を行う 12 if(!$sess->isLogined){ 13 14 // /default/auth/processでない場合に、転送処理を行う。 15 if($req->getModuleName() != 'default' || $req->getControllerName() != 'auth' || 16 $req->getActionName() != 'process') { 17 18 // セッション情報に「モジュール/コントローラ/アクション名」を保存する 19 $sess->currentModule = $req->getModuleName(); 20 $sess->currentController = $req->getControllerName(); 21 $sess->currentAction = $req->getActionName(); 22 23 // 「default/auth/index」を設定する 24 $req->setModuleName('default'); 25 $req->setControllerName('auth'); 26 $req->setActionName('index'); 27 28 } 29 } 30 } 31}

②AuthController.php

PHP

1<?php 2require_once 'Zend/Auth/Adapter/DbTable.php'; 3require_once 'Zend/Auth.php'; 4require_once 'Zend/Db/Adapter/Pdo/Ibm.php'; 5 6class AuthController extends Zend_Controller_Action { 7 8 public function indexAction(){ 9 10 $s = new MySmarty; 11 12 $s->assign('error', '   '); 13 14 $s->simpleDisplay($this->getRequest()); 15 16 } 17 18 public function processAction(){ 19 20 $req = $this->getRequest(); 21 22 $postUser = $req->getPost('uid'); 23 $postPass = $req->getPost('passwd'); 24 25 if(strlen($postUser) == 3){ 26 $postUser = '0'.$postUser; 27 } 28 29 if(strlen($postUser) == 2){ 30 $postUser = '00'.$postUser; 31 } 32 33 if(strlen($postUser) == 1){ 34 $postUser = '000'.$postUser; 35 } 36 37 // ログイン情報DB参照 38 $db = new DbManager('LOGINP'); 39 40 $where = array(); 41 $target = array(); 42 $row = array(); 43 44 //取得値 45 $target['USERCD = ?'] = 'RTRIM(CAST( USERCD AS CHAR(12) )) AS USERCD'; 46 $target['USERNM = ?'] = 'RTRIM(CAST( USERNM AS CHAR(120) )) AS USERNM'; 47 $target['TENCD = ?'] = 'RTRIM(CAST( TENCD AS CHAR(6) )) AS TENCD'; 48 49 //条件 50 $where['USERCD = ?'] = $postUser; 51 $where['PASS = ?'] = $postPass; 52 53 $db->setSelect($where, $target); 54 55 $row = $db->fetchRow(); 56 57 if(!empty($row)) { 58 59 $sess = new Zend_Session_Namespace('management'); 60 61 $sess->setExpirationSeconds(3600); // 60分に設定 62 $sess->isLogined = TRUE; 63 $sess->uid = $postUser; 64 $sess->pass = $postPass; 65 $sess->name = $row['USERNM']; 66 $sess->tencd = $row['TENCD']; 67 68 $action = $sess->currentAction; 69 $controller = $sess->currentController; 70 $module = $sess->currentModule; 71 72 $sess->currentAction = NULL; 73 $sess->currentController = NULL; 74 $sess->currentModule = NULL; 75 76 $this->_redirect('/'.$module.'/'.$controller.'/'.$action); 77 78 } else { 79 80 $res = $this->getResponse(); 81 $this->getRequest()->setActionName('index'); 82 83 $s->assign('error','ユーザIDまたはパスワードが違います。'); 84 85 $s->simpleDisplay($this->getRequest()); 86 87 } 88 } 89 90 91 public function logoutAction() { 92 93 Zend_Session::destroy(); 94 95 $this->_redirect('/index/index'); 96 97 } 98}

③index.tpl(/application/default/views/Smarty/templates/auth内)

PHP

1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4<meta charset="UTF-8"> 5<script src="http://code.jquery.com/jquery.min.js"></script> 6 7{literal} 8<script type="text/javascript" charset="utf-8"> 9</script> 10{/literal} 11</head> 12 13 <body class="ui-mobile-viewport"> 14 <div data-role="header" class="ui-header ui-bar-a" role="banner"> 15 <h1 class="ui-title" tabindex="0" role="heading" aria-level="1">ログイン</h1> 16 </div> 17<br> 18{$error} 19<br> 20 <form method="post" action="{$base}/default/auth/process"> 21 <div class = "display-center"> 22 <tr height=30px> 23 <th width=100 class="display-center">USER</th> 24 <td width=80><input type="text" name="uid" style="width:120px; height:10px; font-size: 15px;" required></td> 25 </tr> 26 <br> 27 <tr height=30px> 28 <th width=100 class="display-center">PASS</th> 29 <td width=80><input type="password" name="passwd" style="width:120px; height:10px; font-size: 15px;" required></td> 30 </tr> 31 <br> 32 <div class="display-center"> 33 <br> 34   <button type="submit" name="submit" value="ログイン" class="moveButton">ログイン</button> 35 <br> 36 <br> 37 </div> 38 </form> 39 </div> 40 </body> 41</html>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問