Indexへ戻る
モジュールサンプル(2) ログイン認証

■アクションクラス
 (Login)
    LoginAction.class.php
 <?php
require_once('logic/Login.class.php');
require_once(
VALIDATOR_DIR 'RegexValidator.class.php');

/**
 * ログインアクション
 */
class LoginAction extends Action
{
    
/**
     * すべてのビジネスロジックを実行する
     */
    
function execute(&$controller, &$request, &$user)
    {
        if (
$request->getParameter('doLogin') === null) {
            return 
VIEW_INPUT;
        }

        
$retValues = array();
        
$logic = &new Logic_Login();
        
$retValues = &$logic->authenticate($request->getParameter('loginCode'),
                                           
$request->getParameter('loginPass'),
                                           
$request->getParameter('nextAction')
                                          );
        if (
$retValues['userCode'] == 'error') {
            
$request->setAttribute('errorMessage',
                                   
$returnValues['errorMessage']
                                   );
            return 
VIEW_ERROR;
        }

        
$user->setAuthenticated(true);

        
$user->setAttribute('userCode'$returnValues['userCode'],
                            
NAMESPACE_GLOBAL
                            
);

        
// アクションへフォワード
        
$controller->forward($request->getParameter('nextModule'),
                             
$request->getParameter('nextAction')
                            );

        return 
VIEW_NONE;
    }

    
/**
     * アクション初期化手続きを実行する
     */
    
function initialize(&$controller, &$request, &$user)
    {
        if (
$request->getParameter('doLogin') === null) {
            
$request->setParameter('loginCode''');
            
$request->setParameter('loginPass''');
        }

        return 
true;
    }

    
/**
     * バリデーションエラーを扱う
     */
    
function handleError(&$controller, &$request, &$user)
    {
        
$renderer = &$request->getAttribute('renderer');
        
$errors $request->getErrors();
        
$renderer->setAttributeByRef('errors'$errors);

        return 
VIEW_INPUT;
    }

    
/**
     * このアクションがサービスを受け付けるリクエストメソッドを取得する
     */
    
function getRequestMethods()
    {
        return 
REQ_POST;
    }

    
/**
     * 特別なパラメータバリデータを登録する
     */
    
function registerValidators(&$validatorManager, &$controller, &$request,
                                &
$user)
    {
        if (
$request->getParameter('doLogin') === null) {
            return;
        }

        
// ユーザコード
        
$validator = &new RegexValidator();
        
$params = array('match' => true,
                        
'pattern' => '/^[0-9]{10}$/',
                        
'pattern_error' => '10桁の数字を入力して下さい',
                        );
        
$validator->initialize($params$controller$request$user);
        
$validatorManager->setRequired('loginCode'true'必須項目です');
        
$validatorManager->register('loginCode'$validator);

        
// パスワード
        
$validator = &new RegexValidator();
        
$params = array('match' => true,
                        
'pattern' => '/^.{1,8}$/',
                        
'pattern_error' => '適切な値を入力して下さい',
                        );
        
$validator->initialize($params$controller$request$user);
        
$validatorManager->setRequired('loginPass'true'必須項目です');
        
$validatorManager->register('loginPass'$validator);
        return;
    }

}

?>
■ビュークラス
 (VIEW_INPUT)
    LoginView_input.class.php
 <?php
/**
 * ログインフォームの表示
 */
class LoginView extends View
{
    
/**
     * ビューを実行する
     */
    
function &execute(&$controller, &$request, &$user)
    {
        
$renderer = &new SmartyRenderer($controller$request$user);
        
$renderer->setTemplateDir(TEMPLATE_DIR);
        
$renderer->setTemplate('SampleInput-input.tpl');

        
$smarty = &$renderer->getEngine();
        
$smarty->compile_dir $GLOBALS['_SMARTY_COMPILE_DIR'];

        
$renderer->setAttribute('loginCode',
                                
$request->getParameter('loginCode')
                                );
        
$renderer->setAttribute('nextModule',
                                
$request->getParameter('nextModule')
                                );
        
$renderer->setAttribute('nextAction',
                                
$request->getParameter('nextAction')
                                );
        
$renderer->setAttribute('backModule',
                                
$request->getParameter('backModule')
                                );
        
$renderer->setAttribute('backAction',
                                
$request->getParameter('backAction')
                                );

        return 
$renderer;
    }

}

?>
■テンプレート
 (input)
    Login-input.tpl
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd"
>
<
html>
<
head>
<
title>サンプル(2)ログイン認証</title>
<
meta http-equiv="Content-Type" content="text/html; charset=EUC-JP">
</
head>
<
body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
<
div align="center">
<
form name="form1" method="post" action="{$BasePath}/index.php/module/Global/action/Login">
  <
input type="hidden" name="nextModule" value="{$nextModule}">
  <
input type="hidden" name="nextAction" value="{$nextAction}">
  <
input type="hidden" name="backModule" value="{$backModule}">
  <
input type="hidden" name="backAction" value="{$backAction}">
<
table width="90%" border="0" cellpadding="0" cellspacing="10">
  <
tr>
    <
td>&nbsp;<br><br></td>
  </
tr>
  <
tr>
    <
td>
    <
table width="80%" border="0" cellspacing="0" cellpadding="0">
      <
tr>
        <
td width="40%" align="left">ユーザーコード</td>
        <
td width="60%" align="left">
        <
input type="text" name="loginCode" value="{$loginCode|default:""|escape:"html"}">
        &
nbsp;<font color="#FF0000" size="-1">{$errors.loginCode|default:""}</font>
        </
td>
      </
tr>
      <
tr>
        <
td>&nbsp;</td>
        <
td>&nbsp;</td>
      </
tr>
      <
tr>
        <
td align="left">暗証番号</td>
        <
td align="left">
        <
input type="password" name="loginPass">&nbsp;<font color="#FF0000" size="-1">
        {
$errors.loginPass|default:""}</font>
        </
td>
      </
tr>
    </
table></td>
  </
tr>
</
table>
<
table border="0" cellspacing="0" cellpadding="0">
  <
tr>
    <
td align="center"><br><br><input type="submit" name="submit" value="ログイン"></td>
  </
tr>
</
table>
</
form>
</
table>
</
div>
</
body>
</
html>
■ビュークラス
 (VIEW_ERROR)
    LoginView_error.class.php
 <?php
/**
 * ログインエラーの表示
 */
class LoginView extends View
{
    
/**
     * ビューを実行する
     */
    
function & execute (&$controller, &$request, &$user)
    {
        
$renderer = &new SmartyRenderer($controller$request$user);
        
$renderer->setTemplateDir(TEMPLATE_DIR);
        
$renderer->setTemplate('SampleInput-input.tpl');

        
$smarty = &$renderer->getEngine();
        
$smarty->compile_dir $GLOBALS['_SMARTY_COMPILE_DIR'];

        
$renderer->setAttribute('errorMessage',
                                
$request->getAttribute('errorMessage')
                                );
        
$renderer->setAttribute('loginCode',
                                
$request->getParameter('loginCode')
                                );
        
$renderer->setAttribute('nextModule',
                                
$request->getParameter('nextModule')
                                );
        
$renderer->setAttribute('nextAction',
                                
$request->getParameter('nextAction')
                                );
        
$renderer->setAttribute('backModule',
                                
$request->getParameter('backModule')
                                );
        
$renderer->setAttribute('backAction',
                                
$request->getParameter('backAction')
                                );

        return 
$renderer;
    }

}
■テンプレート
 (error)
    Login-error.tpl
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd"
>
<
html>
<
head>
<
title>サンプル(2)ログイン認証</title>
<
meta http-equiv="Content-Type" content="text/html; charset=EUC-JP">
</
head>
<
body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
<
div align="center">
<
table width="550" border="0" cellpadding="0" cellspacing="10">
  <
tr>
    <
td align="left"><br><br><br><br><font color="#FF0000" size="-1">{$errorMessage}</font></td>
  </
tr>
</
table>
<
table border="0" cellspacing="10" cellpadding="0">
<
form name="formback" method="post"
 
action="{$BasePath}/index.php/module/{$backModule}/action/{$backAction}">
  <
tr>
    <
td align="center">
      <
input type="submit" name="submit" value="戻る">
      <
input type="hidden" name="loginCode"  value="{$loginCode}">
      <
input type="hidden" name="nextModule" value="{$nextModule}">
      <
input type="hidden" name="nextAction" value="{$nextAction}">
      <
input type="hidden" name="backModule" value="{$backModule}">
      <
input type="hidden" name="backAction" value="{$backAction}">
    </
td>
  </
tr>
</
form>
</
table>
</
div>
</
body>
</
html>