Process flow (2/5 All 5 patterns) | Homepage and ContributionProcess flow Submenu
2017-11-25 release
2021-03-09 update
- SeeCheckpoint | Object-Orientation← point
- Homepage http://mini-blog.localhost/after Login, link Home
- Seescreen SeeTest Data
- Login User ID: user1, Password: password
- index.php1require'../bootstrap.php'set autoloadit is omitted belowSeeAccount registration screen (User registration screen)
- index.php1require'../MiniBlogApplication.php'it is omitted below
- index.php1newMiniBlogApplication$app = new MiniBlogApplication(false)it is omitted below
- index.php1run$app->run()
- Application (core)2run
- $params = $this->router->resolve($this->request->getPathInfo())details↓
- Request (core)3getPathInfo''SeeCheckpoint | Request
- Request (core)4getBaseUrl
- Request (core)5getRequestUri
- Request (core)4getRequestUri
- Router (core)3resolve'status', 'index'$params['controller'], $params['action']SeeCheckpoint | Router← point
- 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'/controllersSeeCheckpoint | Application
- class StatusController extends Controller
- ClassLoader (core)6loadClass'Controller'
- ClassLoader (core)7require'Controller.php'
- return new $controller_class($this)new use variabledetails↓
- Application (core)5new$controller_class = 'StatusController'MiniBlogApplication
- Controller (core)6__constructMiniBlogApplicationSeeCheckpoint | Controller
- Application (core)7getRequest
- Application (core)7getResponse
- Application (core)7getSession
- Application (core)7getDbManager
- $content = $controller->run($action, $params)details↓
- Controller (core)4run(StatusController)'status', 'index''indexAction'
- needsAuthentication($action) && isAuthenticated()denyNot Logindetails↓
- $auth_actions = array('index', 'post') (StatusController.php line 10)
- Controller (core)5needsAuthentication'index'trueLogin Necessary
- Session (core)5isAuthenticated
- Session (core)6get'_authenticated'trueLogin Deny false
- Process start --- before Action start↘Process flow is almost the same except Controller and Actiononly Transition to Login, add Exception
- $content = $this->$action_method($params) variable functions$content = StatusController->indexAction()
- StatusController5indexActionAction start
- Session (core)6get'user''user1' 1 record (Login user)$user
- $statuses = $this->db_manager->get('Status')->fetchAllPersonalArchivesByUserId($user['id'])details↓
- DbManager (core)6get'Status'get('Status') 1stStatusRepository
- DbManager (core)7getConnectionForRepository'Status'DbManager->repository_connection_map['Status']
- DbManager (core)8getConnection
- DbManager (core)8getConnectionreturn current(DbManager->connections)DbManager->connections['master'] = $con↙
- DbManager (core)7getConnectionForRepositoryreturn $con
- $repository = new $repository_class($con)new use variabledetails↓
- DbManager (core)7new$repository_class = 'StatusRepository'$con
- ClassLoader (core)8loadClass'StatusRepository'
- ClassLoader (core)9require'StatusRepository.php'
- class StatusRepository extends DbRepository
- ClassLoader (core)10loadClass'DbRepository'
- ClassLoader (core)11require'DbRepository.php'
- DbRepository (core)8__construct'$con'
- DbRepository (core)9setConnectionStatusRepository->con = $con↗
- DbManager (core)6getDbManager->repositories['Status']=>StatusRepository
- DbManager (core)6getreturn DbManager->repositories['Status']
- StatusRepository6fetchAllPersonalArchivesByUserId$user['id'] 1'user1' (2 cases), 'user2' (2 cases)Follow 'user2'SeeTest DataSeeSQL
- DbRepository (core)7fetchAllSeeCheckpoint | DbRepository
- DbRepository (core)8execute
- Status Repository6fetchAllPersonalArchivesByUserId
- return $this->render(array(... $this->generateCsrfToken ...)$statusesdetails↓
- Controller (core)6generateCsrfToken'status/post''_token'Contribution http://mini-blog.localhost/status/post checkCsrfTokenSeeCheckpoint | Controller
- Session (core)7get'csrf_tokens/status/post'SeeCheckpoint | Session
- Session (core)7set'csrf_tokens/status/post'
- Controller (core)6render$layout = 'layout'$variables['statuses'], $variables['body'], $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)7renderstatus/index$_layout = 'layout'execution1SeeCheckpoint | View (HTML structure)← point
- extract(array_merge($this->defaults, $_variables))View->defaults['base_url']$_variables['_token']$_variables['body']$_variables['statuses']
- View (core)8require'/views/status/index.php'$base_url, $_token, $body, $statuses
- View (core)9setLayoutVar'title', 'Home'
- View (core)9'_token'hidden
- View (core)9escape
- View (index.php)9renderstatus/status$_layout = falseexecution2 foreach (Contribution status1-status4)render in index.php
- extract(array_merge($this->defaults, $_variables))View->defaults['base_url']$_variables['status']
- View (core)10require'/views/status/status.php'$base_url, $status
- View (core)11escape
- $content = ob_get_clean()output1 foreachstatus.php
- View (index.php)9renderreturn $contentoutput1 foreach
- $content = ob_get_clean()output2index.php + status.php foreach
- if ($_layout) {$_layout = 'layout'
- $content = $this->render($_layout, array_merge($this->layout_variables, array('_content' => $content,)))
- View (core)8renderlayout$_layout = falseexecution3render 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 + status.php foreachoutput2
- $content = ob_get_clean()output3layout.php + index.php + status.php foreach
- View (core)8renderreturn $contentoutput3
- }
- View (core)7renderreturn $contentoutput3
- Controller (core)6renderreturn View->render(...)
- StatusController5indexActionreturn StatusController->render(...)Action end
- Controller (core)4runreturn $content
- Response (core)4setContentResponse->content = $content
- Application (core)3runAction
- Response (core)3sendecho Response->content
- Application (core)2run
- DbManager (core)2__destruct
- Contribution http://mini-blog.localhost/status/postContribute button
- Seescreen SeeTest Data
- Login User ID: user1, Password: password
- index.php1require'../bootstrap.php'set autoloadit is omitted belowSeeAccount registration screen (User registration screen)
- index.php1require'../MiniBlogApplication.php'it is omitted below
- index.php1newMiniBlogApplication$app = new MiniBlogApplication(false)it is omitted below
- index.php1run$app->run()
- Application (core)2run
- $params = $this->router->resolve($this->request->getPathInfo())details↓
- Request (core)3getPathInfo'/status/post'SeeCheckpoint | Request
- Request (core)4getBaseUrl
- Request (core)5getRequestUri
- Request (core)4getRequestUri
- Router (core)3resolve'status', 'post'$params['controller'], $params['action']SeeCheckpoint | Router← point
- Application (core)3runAction'status', 'post'
- 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'/controllersSeeCheckpoint | Application
- class StatusController extends Controller
- ClassLoader (core)6loadClass'Controller'
- ClassLoader (core)7require'Controller.php'
- return new $controller_class($this)new use variabledetails↓
- Application (core)5new$controller_class = 'StatusController'MiniBlogApplication
- Controller (core)6__constructMiniBlogApplicationSeeCheckpoint | Controller
- Application (core)7getRequest
- Application (core)7getResponse
- Application (core)7getSession
- Application (core)7getDbManager
- $content = $controller->run($action, $params)details↓
- Controller (core)4run(StatusController)'status', 'post''postAction'
- needsAuthentication($action) && isAuthenticated()denyNot Logindetails↓
- $auth_actions = array('index', 'post') (StatusController.php line 10)
- Controller (core)5needsAuthentication'post'trueLogin Necessary
- Session (core)5isAuthenticated
- Session (core)6get'_authenticated'trueLogin Deny false
- Process start --- before Action start↘Process flow is almost the same except Controller and Actiononly Transition to Login, add Exception
- $content = $this->$action_method($params) variable functions$content = StatusController->postAction()
- StatusController5postActionAction start
- Request (core)6isPosttruePOSTfalse Not POST forward404()
- Request (core)6getPost'_token'Homepage http://mini-blog.localhost/ generateCsrfTokenSeeCheckpoint | Request
- Controller (core)6checkCsrfToken'status/post'trueTokenfalse None Token redirect('/')SeeCheckpoint | Controller
- Session (core)7get'csrf_tokens/status/post'SeeCheckpoint | Session
- Session (core)7set'csrf_tokens/status/post'
- Request (core)6getPost$_POST['body']'status6 user1 test6'$body
- No error startif (count($errors) === 0)
- Session (core)6get'user''user1' 1 record (Login user)$user
- $this->db_manager->get('Status')->insert($user['id'], $body)details↓
- DbManager (core)6get'Status'get('Status') 1stStatusRepository
- DbManager (core)7getConnectionForRepository'Status'DbManager->repository_connection_map['Status']
- DbManager (core)8getConnection
- DbManager (core)8getConnectionreturn current(DbManager->connections)DbManager->connections['master'] = $con↙
- DbManager (core)7getConnectionForRepositoryreturn $con
- $repository = new $repository_class($con)new use variabledetails↓
- DbManager (core)7new$repository_class = 'StatusRepository'$con
- ClassLoader (core)8loadClass'StatusRepository'
- ClassLoader (core)9require'StatusRepository.php'
- class StatusRepository extends DbRepository
- ClassLoader (core)10loadClass'DbRepository'
- ClassLoader (core)11require'DbRepository.php'
- DbRepository (core)8__construct'$con'
- DbRepository (core)9setConnectionStatusRepository->con = $con↗
- DbManager (core)6getDbManager->repositories['Status']=>StatusRepository
- DbManager (core)6getreturn DbManager->repositories['Status']
- StatusRepository6insert'user1' 'status6 user1 test6'$user['id'], $bodySeeSQL
- DbRepository (core)7executeSeeCheckpoint | DbRepository
- StatusRepository6insert
- 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
- No error endError is omitted
- StatusController5postActionreturn AccountController->...Action end
- Controller (core)4runreturn $contentNo error $content: null
- Response (core)4setContentResponse->content = $content
- Application (core)3runAction
- Response (core)3sendecho Response->content
- Application (core)2run
- DbManager (core)2__destruct
note showing $this
e.g. $this->request → MiniBlogApplication->request
SQL
check SQL (phpMyAdmin, select SQL TAB) http://localhost/phpmyadmin/db_sql.php?db=mini_blog
fetchAllPersonalArchivesByUserId
SELECT a.*, u.user_name FROM status a LEFT JOIN user u ON a.user_id = u.id LEFT JOIN following f ON f.following_id = a.user_id AND f.user_id =
1WHERE f.user_id =
1OR u.id =
1ORDER BY a.created_at DESC
a.id | a.user_id | a.body | a.created_at | u.user_name |
---|---|---|---|---|
1 | 1 | status1 user1 test1 | 2017-11-01 00:00:00 | user1 |
2 | 1 | status2 user1 test2 | 2017-11-01 00:00:00 | user1 |
3 | 2 | status3 user2 test3 | 2017-11-01 00:00:00 | user2 |
4 | 2 | status4 user2 test4 | 2017-11-01 00:00:00 | user2 |
(reference) LEFT JOIN user u ON a.user_id = u.id
SELECT a.*, u.id
FROM status a
LEFT JOIN user u ON a.user_id = u.id
ORDER BY a.id
a.id | a.user_id | a.body | a.created_at | u.id |
---|---|---|---|---|
1 | 1 | status1 user1 test1 | 2017-11-01 00:00:00 | 1 |
2 | 1 | status2 user1 test2 | 2017-11-01 00:00:00 | 1 |
3 | 2 | status3 user2 test3 | 2017-11-01 00:00:00 | 2 |
4 | 2 | status4 user2 test4 | 2017-11-01 00:00:00 | 2 |
5 | 3 | status5 user3 test5 | 2017-11-01 00:00:00 | 3 |
(reference) LEFT JOIN following f ON f.following_id = a.user_id AND f.user_id = 1
SELECT a.*, f.following_id, f.user_id FROM status a LEFT JOIN following f ON f.following_id = a.user_id AND f.user_id =
1ORDER BY a.id
a.id | a.user_id | a.body | a.created_at | f.following_id | f.user_id |
---|---|---|---|---|---|
1 | 1 | status1 user1 test1 | 2017-11-01 00:00:00 | NULL | NULL |
2 | 1 | status2 user1 test2 | 2017-11-01 00:00:00 | NULL | NULL |
3 | 2 | status3 user2 test3 | 2017-11-01 00:00:00 | 2 | 1 |
4 | 2 | status4 user2 test4 | 2017-11-01 00:00:00 | 2 | 1 |
5 | 3 | status5 user3 test5 | 2017-11-01 00:00:00 | NULL | NULL |
insert
INSERT INTO status(user_id, body, created_at)
VALUES(1, 'status6 user1 test6', '2017-11-01 00:00:00')
a.id | a.user_id | a.body | a.created_at |
---|---|---|---|
6 | 1 | status6 user1 test6 | 2017-11-01 00:00:00 |
Mini Blog Application
Homepage
Creation procedure |
class | |
---|---|---|
Database | StatusRepository | fetchAllPersonalArchivesByUserId |
Routing | MiniBlogApplication | '/' => array('controller' => 'status', 'action' => 'index') |
Controller | StatusController | indexAction |
View file | status/index.php status/status.php (in status/index.php) |
function | class | method |
---|---|---|
Check | ||
Data set | Controller | generateCsrfToken('status/post') renderargument |
Data get | Session | get('user') Login user ('user1' 1record) |
DbManager | get('Status') StatusRepository | |
StatusRepository | fetchAllPersonalArchivesByUserId($user['id']) 'user1' (2 cases), 'user2' (2 cases) |
|
Data output | ||
Screen | Controller | render(...) Contribution |
Contribution
Creation procedure |
class | |
---|---|---|
Database | StatusRepository | insert fetchAllPersonalArchivesByUserId |
Routing | MiniBlogApplication | '/status/post' => array('controller' => 'status', 'action' => 'post') |
Controller | StatusController | postAction |
View file |
function | class | method |
---|---|---|
Check | Request | isPost POST check |
Controller | checkCsrfToken('status/post', $token) Token check | |
- | Validation (error count) | |
Data set | Controller | generateCsrfToken('status/post') renderargument (Validation error) |
Data get | Request |
getPost('_token') '62138aa5b21213242eee2135892b9589609cc9d6' getPost('body') 'status6 user1 test6' |
Session | get('user') Login user ('user1' 1record) | |
DbManager | get('Status') StatusRepository | |
StatusRepository | fetchAllPersonalArchivesByUserId($user['id']) 'user1' (2 cases), 'user2' (2 cases) |
|
Data output | StatusRepository | insert($user['id'], $body) 1, 'status6 user1 test6' |
Screen | Controller | forward404() 404 error screen (POST error) |
Controller |
redirect('/') Homepage (Token error) redirect('/') Homepage (Contribution OK) |
|
Controller | render(...) again Contribution (Validation error) |
Login User ID: user1, Password: password.
Homepage

Contribution
