迷い人

日々勉強。勉強の先に何か見つかるといいなぁ

【PHP】パーフェクトPHPを解説してみる

ここ2週間ひたすらパーフェクトPHPの7章8章を勉強してきました。そこで得られた理解をまとめておこうと思います。

 

プログラミング学習を初めて約2ヶ月。PHPだけで言えば3週間。

 

少し背伸びして挑戦した記録と成果です。これからパーフェクトPHPを使って学習する人の参考になればと思います。

 

この記事でわかること

  1. パーフェクトPHP7章8章の処理の流れ
  2. 今回の記事はユーザ登録機能の中のアカウント登録画面表示まで
  3. 処理の流れを追いかけるので細かい処理は別記事で

 

この記事を読むための前提知識

  • プログラミングの基本的な知識(PHPでなくてもOK)
  • WEB技術の基本的な知識
  • MVCフレームワークの基本的な知識

 

そもそもパーフェクトPHP7章8章ってなに?

パーフェクトPHPという本の7章「フレームワークによる効率的な開発」8章「ミニブログアプリケーション開発」のことです。

 

7章でMVCフレームワークを自作し、8章で自作したフレームワークを使ってミニブログを作成するという内容になっています。

 

この記事は8章のミニブログの内部処理の流れを追いかけながら、MVCフレームワークについて解説していこうというコンセプトになります。

 

ミニブログの主な機能

  • ユーザ登録機能
  • ログイン、ログアウト機能
  • 200文字以内のつぶやきを投稿する機能
  • 別のユーザをフォローする機能
  • 自分の投稿、フォローしたユーザの投稿を一覧表示する機能

今回はまず「ユーザ登録機能」の「アカウント登録画面表示」について処理の大きな流れを解説します。

 

ユーザ登録機能について

アカウント登録画面から、ユーザIDとパスワードを入力して登録ボタンを押下するとユーザ情報がユーザテーブルに登録されます。

その後、自動的にログインした状態になり、つぶやきが投稿できるホーム画面に遷移します。

 

処理の流れを大まかに絵にすると以下のようになります。

 

f:id:oyaoya1123:20191005165421p:plain

アカウント登録の流れ

 

アカウント登録画面が表示されるまで

それでは本題の処理の流れ(アカウント登録画面が表示されるまで)について解説していきます。

 

アカウント登録するために「http://mini-blog.localhost/index_dev.php/account/signup」にアクセスしてからの処理の概要は以下のようになります。

 

  • index_dev.phpの処理が実行される。
  • MiniBlogApplicationクラスのインスタンスを作成する。
  • ルータからコントローラを特定し、アクションを実行後、その結果を送信し、画面表示する。

 

コードを覗いてみると、以下のようになっています。

 

index_dev.php
<?php ini_set('display_errors', 1); require '../bootstrap.php'; require '../MiniBlogApplication.php'; $app = new MiniBlogApplication(true); #インスタンスの作成 $app->run(); #ルーティングから結果送信までを実施

 

インスタンス、ルータ、コントローラ、アクションという見慣れない単語が出てきました。これらの単語について簡単に説明します。

 

インスタンス

クラスに記述された処理を実行するための実体。MiniBlogApplicationクラスを実行するために必要です。「new クラス名」でインスタンスが作成できます。

 

ルータ

URLからどのコントローラのどのアクションを呼び出すかを決定する。アカウント登録画面表示であれば、AccountContrllerのsignupActionになります。

 

コントローラ

アクションが定義されているもの。AccountControllerには、新規ユーザ登録、ログイン、ログアウト等のアカウントに関するアクションが定義されている。

 

アクション

実際の処理を定義。アカウント登録であれば、アカウント登録画面を表示させる「signupAction」とアカウント登録処理を行う「registerAction」がある。

 

 

それでは「ルータからコントローラを特定し、アクションを実行後、その結果を送信し、画面表示する」を解説します。

 

$app->run()について

run()メソッドの主な処理は以下になります。

 

  • コントローラとアクションを特定する・・・resolve()メソッド
  • アクションを実行する・・・runAction()メソッド
  • 結果を送信し、画面表示する・・・send()メソッド

 

Application.php
public function run() { try { #コントローラとアクションを特定する $params = $this->router->resolve($this->request->getPathInfo()); $controller = $params['controller']; $action = $params['action']; #アクションを実行する $this->runAction($controller, $action, $params); } catch (HttpNotFoundException $e) { #例外処理を記述 } catch (UnauthorizedActionException $e) { #例外処理を記述 } #結果を送信し、画面表示する $this->response->send(); }

 

PHPの記述方法は別記事で解説するとして、run()メソッドの中でアカウント登録画面表示のためのどのような処理がされているかをざっと掴んでください。

 

 

次にrun()メソッドの中の主要なメソッドについて、それぞれ解説します。

 

resolve()メソッド

getPathInfo()を引数に、コントローラとアクションを決定します。getPathInfoは今回でいえば「account/signup」です。

 

これはURL「http://mini-blog.localhost/index_dev.php/account/signup」のindex_dev.phpより後ろの部分になります。

 

これで

コントローラ・・・accountController

アクション・・・signupAction

が決定できました。

 

runAction()メソッド

accountControllerのsignupActionを実行する。実行のためにはaccountControllerのインスタンスが必要なので、インスタンス生成も行います。 

 

 signupActionはアカウント登録画面を表示させるためだけの処理になりますが、別記事で解説します。

 

send()メソッド

アカウント登録画面を表示させる処理を行います。画面表示はシンプルにechoです。

 

最後に

ここまでパーフェクトPHP7章8章のミニブログのアカウント登録機能について解説してきました。

 

かなり長い記事になってしまった。ここまで読んでいただき、ありがとうございます。

 

今後ですが、他の機能部について大きな処理の流れを押さえてから、一つ一つの細かい処理の解説を作ろうと思います。