このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
apricot:app:top [2020/05/08 20:48] y2sunlight [テスト実行] |
apricot:app:top [2020/06/03 13:11] tanaka [クラスエイリアス] |
||
---|---|---|---|
行 12: | 行 12: | ||
* [[apricot: | * [[apricot: | ||
* [[apricot: | * [[apricot: | ||
+ | * [[apricot: | ||
* [[apricot: | * [[apricot: | ||
- | * [[apricot: | + | * [[apricot: |
* [[apricot: | * [[apricot: | ||
* [[apricot: | * [[apricot: | ||
- | * [[apricot: | + | * [[apricot: |
- | \\ | ||
まずは、apricotのアプリを作る為に以下を準備します。 | まずは、apricotのアプリを作る為に以下を準備します。 | ||
行 25: | 行 25: | ||
* アプリ構築用のヘルパークラスとクラスエイリアスの設定 | * アプリ構築用のヘルパークラスとクラスエイリアスの設定 | ||
* HTMLレイアウトとベースコントローラの作成 | * HTMLレイアウトとベースコントローラの作成 | ||
- | * データベースの準備 | ||
---- | ---- | ||
行 32: | 行 31: | ||
==== appフォルダ ==== | ==== appフォルダ ==== | ||
- | 以下に示すようにプロジェクトフォルダ下に、アプリ用のフォルダ app を作成し、その下に7つのフォルダ(Controllers, | + | 以下に示すようにプロジェクトフォルダ下に、アプリ用のフォルダ app を作成し、その下に7つのフォルダ(Controllers, |
< | < | ||
行 40: | 行 39: | ||
| | ||
| | ||
+ | | ||
+ | | ||
+ | | ||
| | ||
| | ||
行 45: | 行 47: | ||
| | ||
| | ||
- | | + | |
</ | </ | ||
行 146: | 行 148: | ||
</ | </ | ||
- | * よく使うコアクラスとアプリ用のヘルパークラスのアリアスを作っています | + | * よく使うコアクラスとアプリ用のヘルパークラスのエイリアスを作っています |
行 214: | 行 216: | ||
\\ | \\ | ||
+ | ===== 例外クラス ===== | ||
+ | |||
+ | まず最初に、アプリで発生する例外を様々な例外クラスのベースとなる ApplicationException を Exceptionクラス から派生させて作ります。 | ||
+ | |||
+ | {{fa> | ||
+ | <code php ApplicationException.php> | ||
+ | <?php | ||
+ | |||
+ | namespace App\Exceptions; | ||
+ | |||
+ | use Exception; | ||
+ | |||
+ | /** | ||
+ | * アプリケーション例外 | ||
+ | */ | ||
+ | class ApplicationException extends Exception | ||
+ | { | ||
+ | /** | ||
+ | * User error message | ||
+ | * @var string | ||
+ | */ | ||
+ | private $user_message; | ||
+ | |||
+ | /** | ||
+ | * Create ApplicationException | ||
+ | * @param string $user_message | ||
+ | * @param string $internal_message | ||
+ | * @param int $code | ||
+ | * @param \Throwable $previous | ||
+ | */ | ||
+ | public function __construct(string $user_message=null, | ||
+ | { | ||
+ | $this-> | ||
+ | parent:: | ||
+ | } | ||
+ | |||
+ | /** | ||
+ | * Get user error message | ||
+ | * @return string | ||
+ | */ | ||
+ | public function getUserMessage() | ||
+ | { | ||
+ | return $this-> | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | * コンストラクタの引数のエラーメッセージが、ユーザ表示用( $user_message )と内部用( $internal_message )の2つがあります。 | ||
+ | * ユーザ表示用のメッセージは、'' | ||
+ | * コンストラクタ内で使用されているボイラープレート '' | ||
+ | |||
+ | 次に、ApplicationException から継承した楽観的ロック例外クラス OptimissticLockException を作ります。 | ||
+ | |||
+ | {{fa> | ||
+ | <code php OptimissticLockException.php> | ||
+ | <?php | ||
+ | |||
+ | namespace App\Exceptions; | ||
+ | |||
+ | /** | ||
+ | * 楽観的ロック例外 | ||
+ | */ | ||
+ | class OptimissticLockException extends ApplicationException | ||
+ | { | ||
+ | /** | ||
+ | * Create Optimisstic Lock | ||
+ | * @param string $message | ||
+ | * @param \Exception $previous | ||
+ | */ | ||
+ | public function __construct() | ||
+ | { | ||
+ | parent:: | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | * コンストラクタ内で使用されているボイラープレート '' | ||
+ | |||
+ | このようにして、アプリで発生する例外は ApplicationException から継承して作るようにします。 | ||
+ | |||
+ | \\ | ||
===== HTMLレイアウト ===== | ===== HTMLレイアウト ===== | ||
行 274: | 行 357: | ||
{{-- | {{-- | ||
- | @if(app_has(' | + | @if(app('auth.menu',false)) |
<ul class=" | <ul class=" | ||
<a id=" | <a id=" | ||
- | {{user()-> | + | {{AuthUser:: |
</a> | </a> | ||
<div class=" | <div class=" | ||
行 316: | 行 399: | ||
</ | </ | ||
- | <footer class=" | + | <footer class=" |
{!! DebugBar:: | {!! DebugBar:: | ||
</ | </ | ||
行 334: | 行 417: | ||
* '' | * '' | ||
* '' | * '' | ||
+ | * '' | ||
* テンプレード変数 '' | * テンプレード変数 '' | ||
* フラッシュ変数 '' | * フラッシュ変数 '' | ||
* 最後尾に [[apricot: | * 最後尾に [[apricot: | ||
+ | * **ボイラープレート** | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
- | >''< | + | >''< |
HTMLテンプレートに関しては本編[[http:// | HTMLテンプレートに関しては本編[[http:// | ||
+ | |||
+ | |||
\\ | \\ | ||
行 388: | 行 480: | ||
\\ | \\ | ||
- | ===== ルーティングとコントローラ ===== | + | ===== コントローラベース |
- | アプリの準備として最後に、スタブコントローラ(StabController)を作り、ルーティングからコントローラアクションの起動までをテストしてみます。 | + | コアクラスにはコントローラのベースクラスとして BaseController がありますが、これを直接継承するのではなく、アプリ用にもう一つコントローラのベースクラスを作ります。現段階でこのクラスは何もしていませんが、後でここに[[apricot: |
+ | |||
+ | {{fa> | ||
+ | <code php Controller.php> | ||
+ | <?php | ||
+ | namespace App\Foundation; | ||
+ | |||
+ | use Core\Foundation\BaseController; | ||
+ | |||
+ | /** | ||
+ | * コントローラ | ||
+ | */ | ||
+ | class Controller extends BaseController | ||
+ | { | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | \\ | ||
+ | |||
+ | ===== スタブ画面 ===== | ||
+ | |||
+ | アプリの準備として最後にスタブ画面を作り、ルーティングからコントローラアクションの起動までをテストしてみます。 | ||
- | ==== routes.php | + | ==== ルーティング |
以下のように、config/ | 以下のように、config/ | ||
行 424: | 行 537: | ||
\\ | \\ | ||
- | ==== コントローラベース ==== | + | ==== コントローラ ==== |
- | + | ||
- | コアクラスにはコントローラのベースクラスとして BaseController がありますが、これを直接継承するのではなく、アプリ用にもう一つコントローラのベースクラスを作ります。現段階でこのクラスは何もしていませんが、後でここに[[apricot: | + | |
- | + | ||
- | {{fa> | + | |
- | <code php Controller.php> | + | |
- | <?php | + | |
- | namespace App\Foundation; | + | |
- | + | ||
- | use Core\Foundation\BaseController; | + | |
- | + | ||
- | /** | + | |
- | * コントローラ | + | |
- | */ | + | |
- | class Controller extends BaseController | + | |
- | { | + | |
- | } | + | |
- | </ | + | |
- | + | ||
- | \\ | + | |
- | + | ||
- | ==== スタブコントローラ ==== | + | |
上述のアプリ用のコントローラベースを継承してスタブコントローラを作ります。 | 上述のアプリ用のコントローラベースを継承してスタブコントローラを作ります。 | ||
行 465: | 行 557: | ||
* @return \Core\Foundation\Response | * @return \Core\Foundation\Response | ||
*/ | */ | ||
- | function index(int $no=null) | + | |
{ | { | ||
$title = "Stub {$no}"; | $title = "Stub {$no}"; | ||
行 479: | 行 571: | ||
* **render(string $view=null, array $variables=[])** | * **render(string $view=null, array $variables=[])** | ||
- $view : テンプレート名\\ 上例では assets/ | - $view : テンプレート名\\ 上例では assets/ | ||
- | - $variables : テンプレート変数の連想配列 | + | - $variables : テンプレート変数の連想配列\\ 上例では [$title, |
\\ | \\ | ||
- | ===== スタブのHTMLテンプレート ===== | + | ==== HTMLテンプレート ==== |
以下にスタブコントローラのindexアクションでレンダリングしているHTMLテンプレートを示します。 | 以下にスタブコントローラのindexアクションでレンダリングしているHTMLテンプレートを示します。 | ||
行 500: | 行 593: | ||
{{-- コンテンツ --}} | {{-- コンテンツ --}} | ||
@section(' | @section(' | ||
- | @foreach($messages as $message) | + | |
- | < | + | |
- | @endforeach | + | < |
+ | @endforeach | ||
+ | @endif | ||
@endsection | @endsection | ||
</ | </ | ||
行 509: | 行 604: | ||
* '' | * '' | ||
* '' | * '' | ||
+ | * '' | ||
HTMLテンプレートに関しては本編[[http:// | HTMLテンプレートに関しては本編[[http:// | ||
行 514: | 行 610: | ||
\\ | \\ | ||
- | ===== テスト実行 | + | ==== テスト実行 ==== |
ここまでの実装で一度実行してみましょう。ブラウザ上で以下のURLにアクセスしてみて下さい。 | ここまでの実装で一度実行してみましょう。ブラウザ上で以下のURLにアクセスしてみて下さい。 |