パーフェクトPHP デバッグ (フレームワーク サンプルコード)

処理の流れ (4/5 全5パターン) | アカウント情報管理とログイン処理の流れ サブメニュー

2017年11月25日 公開

2021年03月09日 更新


  • チェックポイント | オブジェクト指向 参照← ポイント
  • ログイン画面への遷移 http://mini-blog.localhost/'status', 'index'   動画 (YouTube)パーフェクトPHP をデバッグしました (デバッグ例 応用編) ログイン画面への遷移 参照
  • 画面 参照テストデータ 参照
  • 未ログイン
  • index.php1require'../bootstrap.php'オートロード 設定以下 省略アカウント登録画面 (ユーザ登録画面) 参照
  • index.php1require'../MiniBlogApplication.php'以下 省略
  • index.php1newMiniBlogApplication$app = new MiniBlogApplication(false)以下 省略
  • index.php1run$app->run()
  • Application (core)2run
  • 例外開始try {
  • $params = $this->router->resolve($this->request->getPathInfo())詳細↓
  • Request (core)3getPathInfo''チェックポイント | Request 参照
  • Request (core)4getBaseUrl
  • Request (core)5getRequestUri
  • Request (core)4getRequestUri
  • Router (core)3resolve'status', 'index'$params['controller'], $params['action']チェックポイント | Router 参照← ポイント
  • Application (core)3runAction'status', 'index'
  • Application (core)4findController!class_exists'StatusController'
  • ClassLoader (core)5loadClass'StatusController'require'StatusController.php'/core  /models
  • Application (core)5getControllerDir
  • MiniBlogApplication6getRootDir
  • Application (core)5require_once'StatusController.php'/controllersチェックポイント | Application 参照
  • class StatusController extends Controller
  • ClassLoader (core)6loadClass'Controller'
  • ClassLoader (core)7require'Controller.php'
  • return new $controller_class($this)new 変数 使用詳細↓
  • Application (core)5new$controller_class = 'StatusController'MiniBlogApplication
  • Controller (core)6__constructMiniBlogApplicationチェックポイント | Controller 参照
  • Application (core)7getRequest
  • Application (core)7getResponse
  • Application (core)7getSession
  • Application (core)7getDbManager
  • $content = $controller->run($action, $params)詳細↓
  • Controller (core)4run(StatusController)'status', 'index''indexAction'
  • needsAuthentication($action) && isAuthenticated()否定ログイン 詳細↓
  • $auth_actions = array('index', 'post') (StatusController.php 10行目)
  • 例外発生throw
  • Controller (core)5needsAuthentication'index'trueログイン必要
  • Session (core)5isAuthenticated
  • Session (core)6get'_authenticated'false未ログイン 否定 true
  • throw new5UnauthorizedActionException
  • ClassLoader (core)6loadClass'UnauthorizedActionException'
  • ClassLoader (core)7require'UnauthorizedActionException.php'
  • 例外捕捉} catch (UnauthorizedActionException $e) {(Application.php 187行目)

  • $login_action = array('account', 'signin')(MiniBlogApplication.php 10行目)
  • list($controller, $action) = $this->login_action
  • ログイン画面 http://mini-blog.localhost/account/signin未ログイン, リンク ログイン
  • Application (core)3runAction'account', 'signin'
  • Application (core)4findController!class_exists'AccountController'
  • ClassLoader (core)5loadClass'AccountController'require'AccountController.php'/core  /models
  • Application (core)5getControllerDir
  • MiniBlogApplication6getRootDir
  • Application (core)5require_once'AccountController.php'/controllersチェックポイント | Application 参照
  • return new $controller_class($this)new 変数 使用詳細↓
  • Application (core)5new$controller_class = 'AccountController'MiniBlogApplication
  • Controller (core)6__constructMiniBlogApplicationチェックポイント | Controller 参照
  • Application (core)7getRequest
  • Application (core)7getResponse
  • Application (core)7getSession
  • Application (core)7getDbManager
  • $content = $controller->run($action, $params)詳細↓
  • Controller (core)4run(AccountController)'account', 'signin''signinAction'
  • needsAuthentication($action) && isAuthenticated()否定ログイン 無詳細↓
  • $auth_actions = array('index', 'signout', 'follow') (AccountController.php 10行目)
  • Controller (core)5needsAuthentication'signin'falseログイン不要isAuthenticated 未処理 (ログイン中/未ログイン チェックしない)
  • 処理の開始 ~ アクション開始↘ の直前まで処理の流れは コントローラアクション以外は ほぼ同じですログイン画面への遷移 のみ、例外処理が追加されます

  • $content = $this->$action_method($params) 可変関数$content = AccountController->signinAction()
  • AccountController5signinActionアクション開始
  • Session (core)6isAuthenticated
  • Session (core)7get'_authenticated'false未ログインtrue ログイン中 redirect('/account')
  • return $this->render(array(... $this->generateCsrfToken ...)詳細↓
  • Controller (core)6generateCsrfToken'account/signin''_token'ログイン処理 http://mini-blog.localhost/account/authenticate checkCsrfTokenチェックポイント | Controller 参照
  • Session (core)7get'csrf_tokens/account/signin'チェックポイント | Session 参照
  • Session (core)7set'csrf_tokens/account/signin'
  • Controller (core)6render$layout = 'layout'$variables['user_name'], $variables['password'], $variables['_token']
  • Request (core)7getBaseUrl
  • Request (core)8getRequestUri
  • Controller (core)7newView
  • ClassLoader (core)8loadClass'View'
  • ClassLoader (core)9requireView.php'
  • Application (core)8getViewDir
  • MiniBlogApplication9getRootDir
  • View (core)8__construct$base_dir, $defaults
  • View (core)7renderaccount/signin$_layout = 'layout'実行順1チェックポイント | View (HTML構成) 参照← ポイント
  • extract(array_merge($this->defaults, $_variables))View->defaults['base_url']$_variables['_token']$_variables['user_name']$_variables['password']
  • View (core)8require'/views/account/signin.php'$base_url, $_token, $user_name, $password
  • View (core)9setLayoutVar'title', 'ログイン'
  • View (core)9'_token'hidden
  • View (core)9escape
  • View (signin.php)9renderaccount/inputs$_layout = false実行順2render in signin.php
  • extract(array_merge($this->defaults, $_variables))$_variables['user_name']$_variables['password']
  • View (core)10require'/views/account/inputs.php'$user_name, $password
  • View (core)11escape
  • $content = ob_get_clean()出力順1inputs.php
  • View (signin.php)9renderreturn $content出力順1
  • $content = ob_get_clean()出力順2signin.php + inputs.php
  • if ($_layout) {$_layout = 'layout'
  • $content = $this->render($_layout, array_merge($this->layout_variables, array('_content' => $content,)))
  • View (core)8renderlayout$_layout = false実行順3render in render
  • extract(array_merge($this->defaults, $_variables))$_variables['title']View->defaults['base_url']View->defaults['session']$_variables['_content']
  • View (core)9require'/views/layout.php'$title, $base_url, $session, $_content
  • View (core)10escape
  • Session (core)10isAuthenticated
  • Session (core)11get'_authenticated'false
  • layout10echo $_contentsignin.php + inputs.php出力順2
  • $content = ob_get_clean()出力順3layout.php + signin.php + inputs.php
  • View (core)8renderreturn $content出力順3
  • }
  • View (core)7renderreturn $content出力順3
  • Controller (core)6renderreturn View->render(...)
  • AccountController5signinActionreturn AccountController->render(...)アクション終了

  • Controller (core)4runreturn $content
  • Response (core)4setContentResponse->content = $content
  • Application (core)3runAction
  • 例外終了}
  • Response (core)3sendecho Response->content
  • Application (core)2run
  • DbManager (core)2__destruct

  • ログイン処理 http://mini-blog.localhost/account/authenticateログイン ボタン
  • 画面 参照テストデータ 参照
  • ユーザID: user1、パスワード: password でログイン
  • index.php1require'../bootstrap.php'オートロード 設定以下 省略アカウント登録画面 (ユーザ登録画面) 参照
  • index.php1require'../MiniBlogApplication.php'以下 省略
  • index.php1newMiniBlogApplication$app = new MiniBlogApplication(false)以下 省略
  • index.php1run$app->run()
  • Application (core)2run
  • $params = $this->router->resolve($this->request->getPathInfo())詳細↓
  • Request (core)3getPathInfo'/account/authenticate'チェックポイント | Request 参照
  • Request (core)4getBaseUrl
  • Request (core)5getRequestUri
  • Request (core)4getRequestUri
  • Router (core)3resolve'account', 'authenticate'$params['controller'], $params['action']チェックポイント | Router 参照← ポイント
  • Application (core)3runAction'account', 'authenticate'
  • Application (core)4findController!class_exists'AccountController'
  • ClassLoader (core)5loadClass'AccountController'require'AccountController.php'/core  /models
  • Application (core)5getControllerDir
  • MiniBlogApplication6getRootDir
  • Application (core)5require_once'AccountController.php'/controllersチェックポイント | Application 参照
  • class AccountController extends Controller
  • ClassLoader (core)6loadClass'Controller'
  • ClassLoader (core)7require'Controller.php'
  • return new $controller_class($this)new 変数 使用詳細↓
  • Application (core)5new$controller_class = 'AccountController'MiniBlogApplication
  • Controller (core)6__constructMiniBlogApplicationチェックポイント | Controller 参照
  • Application (core)7getRequest
  • Application (core)7getResponse
  • Application (core)7getSession
  • Application (core)7getDbManager
  • $content = $controller->run($action, $params)詳細↓
  • Controller (core)4run(AccountController)'account', 'authenticate''authenticateAction'
  • needsAuthentication($action) && isAuthenticated()否定ログイン 無詳細↓
  • $auth_actions = array('index', 'signout', 'follow') (AccountController.php 10行目)
  • Controller (core)5needsAuthentication'authenticate'falseログイン不要isAuthenticated 未処理 (ログイン中/未ログイン チェックしない)
  • 処理の開始 ~ アクション開始↘ の直前まで処理の流れは コントローラアクション以外は ほぼ同じですログイン画面への遷移 のみ、例外処理が追加されます

  • $content = $this->$action_method($params) 可変関数$content = AccountController->authenticateAction()
  • AccountController5authenticateActionアクション開始
  • Sessiont6isAuthenticated
  • Session (core)7get'_authenticated'false未ログインtrue ログイン中 redirect('/account')
  • Request (core)6isPosttruePOSTfalse POSTでない forward404()
  • Request (core)6getPost'_token'ログイン画面への遷移 http://mini-blog.localhost/ generateCsrfTokenチェックポイント | Request 参照
  • Controller (core)6checkCsrfToken'account/signin'trueトークン有false トークン無 redirect('/account/signin')チェックポイント | Controller 参照
  • Session (core)7get'csrf_tokens/account/signin'チェックポイント | Session 参照
  • Session (core)7set'csrf_tokens/account/signin'
  • Request (core)6getPost'user1'$user_name
  • Request (core)6getPost'password'$password
  • エラー無 開始if (count($errors) === 0)
  • $this->db_manager->get('User')詳細↓
  • DbManager (core)6get'User'get('User') 1回目UserRepository
  • DbManager (core)7getConnectionForRepository'User'DbManager->repository_connection_map['User']
  • DbManager (core)8getConnection
  • DbManager (core)8getConnectionreturn current(DbManager->connections)DbManager->connections['master'] = $con
  • DbManager (core)7getConnectionForRepositoryreturn $con
  • $repository = new $repository_class($con)new 変数 使用詳細↓
  • DbManager (core)7new$repository_class = 'UserRepository'$con
  • ClassLoader (core)8loadClass'UserRepository'
  • ClassLoader (core)9require'UserRepository.php'
  • class UserRepository extends DbRepository
  • ClassLoader (core)10loadClass'DbRepository'
  • ClassLoader (core)11require'DbRepository.php'
  • DbRepository (core)8__construct'$con'
  • DbRepository (core)9setConnectionUserRepository->con = $con
  • DbManager (core)6getDbManager->repositories['User']=>UserRepository
  • DbManager (core)6getreturn DbManager->repositories['User']
  • UserRepository6fetchByUserName'user1'$user'user1' 1レコードSQL 参照
  • DbRepository (core)7fetchチェックポイント | DbRepository 参照
  • DbRepository (core)8execute
  • UserRepository6fetchByUserName
  • UserRepository6hashPassword'password'
  • Session (core)6setAuthenticatedtrue
  • Session (core)7set'_authenticated'trueログイン中
  • Session (core)7regeneratetrueセッション固定攻撃対策 (ログイン状態の変更)
  • Session (core)7regeneratesession_regenerate_id (true)セッションID を新しく発行$sessionIdRegenerated trueチェックポイント | Session 参照
  • Session (core)6set'user'$user'user1' 1レコード (ログインユーザ)
  • Controller (core)6redirect'/'
  • Request (core)7isSslfalse
  • Request (core)7getHost
  • Request (core)7getBaseUrl
  • Request (core)8getRequestUri
  • $urlhttp://mini-blog.localhost/
  • Response (core)7setStatusCode
  • Response (core)7setHttpHeader
  • Controller (core)6redirect
  • エラー無 終了エラー有 省略
  • AccountController5authenticateActionreturn AccountController->...アクション終了

  • Controller (core)4runreturn $contentエラー無の時 $content: null
  • Response (core)4setContentResponse->content = $content
  • Application (core)3runAction
  • Response (core)3sendecho Response->content
  • Application (core)2run
  • DbManager (core)2__destruct

  • アカウント情報トップ http://mini-blog.localhost/accountリンク アカウント
  • 画面 参照テストデータ 参照
  • ユーザID: user1、パスワード: password でログイン
  • index.php1require'../bootstrap.php'オートロード 設定以下 省略アカウント登録画面 (ユーザ登録画面) 参照
  • index.php1require'../MiniBlogApplication.php'以下 省略
  • index.php1newMiniBlogApplication$app = new MiniBlogApplication(false)以下 省略
  • index.php1run$app->run()
  • Application (core)2run
  • $params = $this->router->resolve($this->request->getPathInfo())詳細↓
  • Request (core)3getPathInfo'/account'チェックポイント | Request 参照
  • Request (core)4getBaseUrl
  • Request (core)5getRequestUri
  • Request (core)4getRequestUri
  • Router (core)3resolve'account', 'index'$params['controller'], $params['action']チェックポイント | Router 参照← ポイント
  • Application (core)3runAction'account', 'index'
  • Application (core)4findController!class_exists'AccountController'
  • ClassLoader (core)5loadClass'AccountController'require'AccountController.php'/core  /models
  • Application (core)5getControllerDir
  • MiniBlogApplication6getRootDir
  • Application (core)5require_once'AccountController.php'/controllersチェックポイント | Application 参照
  • class AccountController extends Controller
  • ClassLoader (core)6loadClass'Controller'
  • ClassLoader (core)7require'Controller.php'
  • return new $controller_class($this)new 変数 使用詳細↓
  • Application (core)5new$controller_class = 'AccountController'MiniBlogApplication
  • Controller (core)6__constructMiniBlogApplicationチェックポイント | Controller 参照
  • Application (core)7getRequest
  • Application (core)7getResponse
  • Application (core)7getSession
  • Application (core)7getDbManager
  • $content = $controller->run($action, $params)詳細↓
  • Controller (core)4run(AccountController)'account', 'index''indexAction'
  • needsAuthentication($action) && isAuthenticated()否定ログイン 無詳細↓
  • $auth_actions = array('index', 'signout', 'follow') (AccountController.php 10行目)
  • Controller (core)5needsAuthenticationindextrueログイン必要
  • Session (core)5isAuthenticated
  • Session (core)6get'_authenticated'trueログイン中 否定 false
  • 処理の開始 ~ アクション開始↘ の直前まで処理の流れは コントローラアクション以外は ほぼ同じですログイン画面への遷移 のみ、例外処理が追加されます

  • $content = $this->$action_method($params) 可変関数$content = AccountController->indexAction()
  • AccountController5indexActionアクション開始
  • Session (core)6get'user1' 1レコード (ログインユーザ)$user
  • $followings = $this->db_manager->get('User')->fetchAllFollowingsByUserId($user['id'])フォロー 'user2'詳細↓
  • DbManager (core)6get'User'get('User') 1回目UserRepository
  • DbManager (core)7getConnectionForRepository'User'DbManager->repository_connection_map['User']
  • DbManager (core)8getConnection
  • DbManager (core)8getConnectionreturn current(DbManager->connections)DbManager->connections['master'] = $con
  • DbManager (core)7getConnectionForRepositoryreturn $con
  • $repository = new $repository_class($con)new 変数 使用詳細↓
  • DbManager (core)7new$repository_class = 'UserRepository'$con
  • ClassLoader (core)8loadClass'UserRepository'
  • ClassLoader (core)9require'UserRepository.php'
  • class UserRepository extends DbRepository
  • ClassLoader (core)10loadClass'DbRepository'
  • ClassLoader (core)11require'DbRepository.php'
  • DbRepository (core)8__construct'$con'
  • DbRepository (core)9setConnectionUserRepository->con = $con
  • DbManager (core)6getDbManager->repositories['User']=>UserRepository
  • DbManager (core)6getreturn DbManager->repositories['User']
  • UserRepository6fetchAllFollowingsByUserId$user_idSQL 参照
  • DbRepository (core)7fetchAllチェックポイント | DbRepository 参照
  • DbRepository (core)8execute
  • User Repository6fetchAllFollowingsByUserId
  • Controller (core)6render$layout = 'layout'$variables['user'] 'user1'$variables['followings'] 'user2'
  • Request (core)7getBaseUrl
  • Request (core)8getRequestUri
  • Controller (core)7newView
  • ClassLoader (core)8loadClass'View'
  • ClassLoader (core)9requireView.php'
  • Application (core)8getViewDir
  • MiniBlogApplication9getRootDir
  • View (core)8__construct$base_dir, $defaults
  • View (core)7renderaccount/index$_layout = 'layout'$_variables['user'] 'user1'$_variables['followings'] 'user2'実行順1チェックポイント | View (HTML構成) 参照← ポイント
  • extract(array_merge($this->defaults, $_variables))View->defaults['base_url']$_variables['user']$_variables['followings']
  • View (core)8require'/views/account/index.php'$base_url, $user, $followings
  • View (core)9setLayoutVar'title', 'アカウント'
  • View (core)9escape
  • foreach['followings'] 'user2'
  • $content = ob_get_clean()出力順1index.php
  • if ($_layout) {$_layout = 'layout'
  • $content = $this->render($_layout, array_merge($this->layout_variables, array('_content' => $content,)))
  • View (core)8renderlayout$_layout = false実行順2render in render
  • extract(array_merge($this->defaults, $_variables))$_variables['title']View->defaults['base_url']View->defaults['session']$_variables['_content']
  • View (core)9require'/views/layout.php'$title, $base_url, $session, $_content
  • View (core)10escape
  • Session (core)10isAuthenticated
  • Session (core)11get'_authenticated'true
  • layout10echo $_contentindex.php出力順1
  • $content = ob_get_clean()出力順2layout.php + index.php
  • View (core)8renderreturn $content出力順2
  • }
  • View (core)7renderreturn $content出力順2
  • Controller (core)6renderreturn View->render(...)
  • AccountController5indexActionreturn StatusController->render(...)アクション終了

  • Controller (core)4runreturn $content
  • Response (core)4setContentResponse->content = $content
  • Application (core)3runAction
  • Response (core)3sendecho Response->content
  • Application (core)2run
  • DbManager (core)2__destruct

  • ログアウト http://mini-blog.localhost/account/signoutリンク ログアウト
  • 画面 参照テストデータ 参照
  • ユーザID: user1、パスワード: password でログイン
  • index.php1require'../bootstrap.php'オートロード 設定以下 省略アカウント登録画面 (ユーザ登録画面) 参照
  • index.php1require'../MiniBlogApplication.php'以下 省略
  • index.php1newMiniBlogApplication$app = new MiniBlogApplication(false)以下 省略
  • index.php1run$app->run()
  • Application (core)2run
  • $params = $this->router->resolve($this->request->getPathInfo())詳細↓
  • Request (core)3getPathInfo'/account/signout'チェックポイント | Request 参照
  • Request (core)4getBaseUrl
  • Request (core)5getRequestUri
  • Request (core)4getRequestUri
  • Router (core)3resolve'account', 'signout'$params['controller'], $params['action']チェックポイント | Router 参照← ポイント
  • Application (core)3runAction'account', 'signout'
  • Application (core)4findController!class_exists'AccountController'
  • ClassLoader (core)5loadClass'AccountController'require'AccountController.php'/core  /models
  • Application (core)5getControllerDir
  • MiniBlogApplication6getRootDir
  • Application (core)5require_once'AccountController.php'/controllersチェックポイント | Application 参照
  • class AccountController extends Controller
  • ClassLoader (core)6loadClass'Controller'
  • ClassLoader (core)7require'Controller.php'
  • return new $controller_class($this)new 変数 使用詳細↓
  • Application (core)5new$controller_class = 'AccountController'MiniBlogApplication
  • Controller (core)6__constructMiniBlogApplicationチェックポイント | Controller 参照
  • Application (core)7getRequest
  • Application (core)7getResponse
  • Application (core)7getSession
  • Application (core)7getDbManager
  • $content = $controller->run($action, $params)詳細↓
  • Controller (core)4run(AccountController)'account', 'signout''signoutAction'
  • needsAuthentication($action) && isAuthenticated()否定ログイン 無詳細↓
  • $auth_actions = array('index', 'signout', 'follow') (AccountController.php 10行目)
  • Controller (core)5needsAuthentication'signout'trueログイン必要
  • Session (core)5isAuthenticated
  • Session (core)6get'_authenticated'trueログイン中 否定 false
  • 処理の開始 ~ アクション開始↘ の直前まで処理の流れは コントローラアクション以外は ほぼ同じですログイン画面への遷移 のみ、例外処理が追加されます

  • $content = $this->$action_method($params) 可変関数$content = AccountController->signoutAction()
  • AccountController5signoutActionアクション開始
  • Session (core)6clear$_SESSION = array()
  • Session (core)6setAuthenticatedfalse
  • Session (core)7set'_authenticated'false未ログイン
  • Session (core)7regeneratetrueセッション固定攻撃対策 (ログイン状態の変更)
  • Session (core)7regeneratesession_regenerate_id (true)セッションID を新しく発行$sessionIdRegenerated trueチェックポイント | Session 参照
  • Controller (core)6redirect'/account/signin'
  • Request (core)7isSslfalse
  • Request (core)7getHost
  • Request (core)7getBaseUrl
  • Request (core)8getRequestUri
  • $urlhttp://mini-blog.localhost/account/signin
  • Response (core)7setStatusCode
  • Response (core)7setHttpHeader
  • Controller (core)6redirect
  • AccountController5signoutActionreturn AccountController->redirect('/account/signin')アクション終了

  • Controller (core)4runreturn $content
  • Response (core)4setContentResponse->content = $content
  • Application (core)3runAction
  • Response (core)3sendecho Response->content
  • Application (core)2run
  • DbManager (core)2__destruct

$this の表示
$this->request  →  MiniBlogApplication->request



SQL

SQL チェック (phpMyAdmin, SQL タブ 選択)  http://localhost/phpmyadmin/db_sql.php?db=mini_blog

fetchByUserName

SELECT * FROM user WHERE user_name = 'user1'
id user_name password created_at
1 user1 ee5281d035bd1bd7786301be4274a68b006ae916 2017-11-01 00:00:00

fetchAllFollowingsByUserId

SELECT u.*
    FROM user u
        LEFT JOIN following f ON f.following_id = u.id
    WHERE f.user_id = 1
id user_name password created_at
2 user2 ee5281d035bd1bd7786301be4274a68b006ae916 2017-11-01 00:00:00
(参考) LEFT JOIN following f ON f.following_id = u.id
SELECT u.*, f.*
    FROM user u
        LEFT JOIN following f ON f.following_id = u.id
    ORDER BY u.id
u.id u.user_name u.password u.created_at f.user_id f.following_id
1 user1 ee5281d035bd1bd7786301be4274a68b006ae916 2017-11-01 00:00:00 NULL NULL
2 user2 ee5281d035bd1bd7786301be4274a68b006ae916 2017-11-01 00:00:00 1 2
3 user3 ee5281d035bd1bd7786301be4274a68b006ae916 2017-11-01 00:00:00 NULL NULL

Mini Blog Application

ログイン画面

http://mini-blog.localhost/account/signin
作成手順 クラス
データベース
ルーティング MiniBlogApplication '/account/:action'
  => array('controller' => 'account')
コントローラ AccountController signinAction
ビューファイル account/signin.php
account/inputs.php (in account/signin.php)
AccountController   signinAction
機能 クラス メソッド
チェック Session isAuthenticated() ログイン状態 チェック
データ設定 Controller generateCsrfToken('account/signin') render引数
データ取得
データ出力
画面 Controller redirect('/account') アカウント情報トップ (ログイン済 エラー)
Controller render(...) ログイン画面 (未ログイン)

ログイン処理

http://mini-blog.localhost/account/authenticate
作成手順 クラス
データベース UserRepository fetchByUserName
hashPassword
ルーティング MiniBlogApplication '/account/:action'
  => array('controller' => 'account')
コントローラ AccountController authenticateAction
ビューファイル
AccountController   authenticateAction
機能 クラス メソッド
チェック Session isAuthenticated() ログイン状態 チェック (開始時 未ログイン)
Request isPost POST チェック
Controller checkCsrfToken('account/signin', $token) トークン チェック
- バリデーション (エラー カウント)
- if (!$user ユーザ 無 (バリデーション内)
- ($user['password'] !== $user_repository->hashPassword($password)
  パスワード チェック (バリデーション内)
データ設定 Session setAuthenticated(true) ログイン済 (ログイン時)
Session set('user', $user) ログインユーザ ('user1' 1レコード) (ログイン時)
Controller generateCsrfToken('account/signin') render引数 (バリデーション エラー)
データ取得 Request getPost('_token') 'ed38d8176bff02c2b0364055da5e8cb4d72fc85d'
getPost('user_name') 'user1'
getPost('password') 'password'
DbManager get('User') UserRepository
UserRepository fetchByUserName($user_name) 'user1' 1レコード
UserRepository hashPassword($password) 'password'
データ出力
画面 Controller redirect('/account') アカウント情報トップ (ログイン済 エラー)
redirect('/account/signin') ログイン画面 (トークン エラー)
redirect('/') ホームページ (ログイン後, 'user1' のホーム)
Controller forward404() 404エラー画面 (POST エラー)
Controller render(...) 再度 ログイン画面 (バリデーション エラー)

アカウント情報トップ

http://mini-blog.localhost/account
作成手順 クラス
データベース UserRepository fetchAllFollowingsByUserId
ルーティング MiniBlogApplication '/account'
  => array('controller' => 'account', 'action' => 'index')
コントローラ AccountController indexAction
ビューファイル account/index.php
AccountController   'indexAction
機能 クラス メソッド
チェック
データ設定
データ取得 Session get('User') ログインユーザ ('user1' 1レコード)
DbManager get('User') UserRepository
UserRepository fetchAllFollowingsByUserId($user['id']) フォロー 'user2'
データ出力
画面 Controller render(...) アカウント情報トップ

ログアウト

http://mini-blog.localhost/account/signout
作成手順 クラス
データベース
ルーティング MiniBlogApplication '/account/:action'
  => array('controller' => 'account')
コントローラ AccountController signoutAction
ビューファイル
AccountController   signoutAction
機能 クラス メソッド
チェック
データ設定 Session clear() $_SESSION = array()
Session setAuthenticated(false) 未ログイン
データ取得
データ出力
画面 Controller redirect('/account/signin') ログイン画面

ユーザID: user1、パスワード: password でログイン

ログイン

アカウント情報管理

Page Top
Page Bottom