メインメニュー
XAMPP アレンジ
IED
WSL2
-
道具箱
リポジトリ編
フレームワーク編
公開ソフトウェア
メタ
リンク
- PHP ライブラリ
- PHP 言語
apricot:usage:ja:frontend目次
文書の過去の版を表示しています。
編集中
Apricot フロントエンド
テンプレートエンジン
HTMLテンプレート
HTMLテンプレートは、BladeOneをラップしたViewクラスが担当します。Viewクラスはシングルトンとして実装し、以下のように使用します。BladeOneと同じメソッド使用できますが、apricotで使用するのはrun()メソッドだけです。
使用法: View::{メソッド}
メソッド 機能 string run(string $view, array $variables = []) テンプレートエンジンの実行 - $view — テンプレート名 ( テンプレートファイル名は {$view}.blade.php になる)
- $variables — ビュー変数 (['変数名'=>'値']の形式の連想配列)
- return値 — HTMLテキストを返す
クラスエイリアス
完全修飾クラス名を短くコーディングする為に、クラスのエイリアスを作成します。このエイリアスは、特にHTMLテンプレートでの使用を想定しています。
以下に示す初期設定ファイル(aliases.setup.php)を config/setup フォルダの下に作成して下さい。
/apricot/config/setup
- aliases.setup.php
<?php /** * Registers the class alias used in the view template */ return function():bool { $aliases = [ /* Apricot */ 'Input' => Apricot\Input::class, 'QueryString' => Apricot\QueryString::class, 'Session' => Apricot\Session::class, 'Flash' => Apricot\Flash::class, 'Cookie' => Apricot\Cookie::class, 'Config' => Apricot\Config::class, 'Log' => Apricot\Log::class, 'Debug' => Apricot\Debug::class, 'DebugBar' => Apricot\DebugBar::class, 'ErrorBag' => Apricot\Foundation\ErrorBag::class, /* App */ 'ViewHelper' => App\Helpers\ViewHelper::class, 'ValidatorErrorBag' => App\Foundation\ValidatorErrorBag::class, 'AuthUser' => App\Foundation\Security\AuthUser::class, ]; // Creates an alias for a class foreach($aliases as $alias_name => $original_class) { class_alias($original_class, $alias_name); } return true; // Must return true on success };
- よく使うコアクラスとアプリ用のヘルパークラスのエイリアスを作っています
ヘルパークラス
アプリ用のヘルパー関数を作る準備として 表示用のHelperクラスを作成しておきます。必要に応じて、関数やクラスを追加していきます。
- ViewHelper — 表示用(主にHTMLテンプレートで使用)
/apricot/app/Helpers
- ViewHelper.php
<?php namespace App\Helpers; /** * View Helper */ class ViewHelper { /** * Returns a formatted date string. * * This method is an example of a view helper. * * @param string $datetime * @param string $format * @return string */ static function formatDatetime(string $datetime, string $format='Y-m-d'):string { return date($format, strtotime($datetime)); } }
HTMLレイアウト
apricotで採用しているテンプレートエンジン BladeOne の文法に従ってアプリ全体のレイアウトを作ります。また、cssとJavaScriptファイルも準備します。
- layout.blade.php — アプリ全体のレイアウト
- main.css — アプリ共通のスタイルシート
- main.js — アプリ共通で使用するJavaScript
設定ファイル
/apricot/config/setting
- bladeone.setting.php
<?php /** * This file contains BladeOne settings. */ return [ 'template_path' => env('VIEW_TEMPLATE',assets_dir('views')), 'compile_path' => env('VIEW_CACHE',var_dir('cache/views')), 'mode' => \eftec\bladeone\BladeOne::MODE_AUTO, ];
- template_path — HTMLテンプレートファイルのパス(既定値は assets/views/)
- compile_path — コンパイル後のHTMLファイルのパス(既定値は var/cache/)
- mode — 実行モード(既定値は MODE_AUTO)
初期設定ファイル
Viewクラスには以下の初期設定ファイルが存在します。
/apricot/config/setup
- bladeone.setup.php
<?php /** * Initial setting of View template (Blade One) */ return function():bool { // @now directive Apricot\View::directive('now', function() { return "<?php echo date('Y-m-d H:i'); ?>"; }); // @csrf directive Apricot\View::directive('csrf', function() { $name = Apricot\Foundation\Security\CsrfToken::CSRF_KEY; return '<input name="'.$name.'" type="hidden" value="{{Session(\''.$name.'\')}}">'; }); return true; // Must return true on success };
ここでは、HTMLテンプレートで使用するカスタムディレクティブを追加します。上のコードは、現在時刻を表示する @now ディレクティブの追加を行っています。CSRFトークンを出力する @csrf ディレクティブなどもここで実装する予定です。
多言語化
トランスレーション
トランスレーションは Translationクラスに実装されており、このクラスも基本的な機能だけをシンプルに作成しています。
Translationクラスの実装コードを以下に示します。ユーザはこのクラスを直接利用するのではなく、次節に示す Langクラスを使用して下さい。
/apricot/core/Foundation
- Translation.php
<?php namespace Apricot\Foundation; /** * Plain Translation Class */ class Translation { /** * @var string Language code(ISO 639-1) */ private $lang; /** * @var array Messages */ private $messages = []; /** * Constructor * * @param string $lang language code(ISO 639-1) */ public function __construct(string $lang='en') { $this->lang = $lang; // Reads messages. foreach(glob(assets_dir("lang/{$lang}/*.php")) as $file) { $arr = explode('.', basename($file)); if (is_file($file)) $this->read($file, $arr[0]); } } /** * Gets the language code(ISO 639-1). * * @return string */ public function getLangCode():string { return $this->lang; } /** * Checks if the given key is present. * * @param string $key * @return bool */ public function has(string $key):bool { return array_key_exists($key, $this->messages); } /** * Gets the message specified by the key. * * @param string $key * @param string $params * @return string */ public function get(string $key, array $params = []):string { if ($this->has($key)) { $message = $this->messages[$key]; if (!empty($params)) { $message = str_replace(array_keys($params), array_values($params), $message); } } else { $message = $key; } return $message; } /** * Reads messages. * * @param string $lang_file * @param string $top_key */ private function read(string $lang_file, string $top_key) { $messages = require_once $lang_file; if (is_array($messages) && count($messages)) { $dot_arr = array_dot($messages, $top_key.'.'); $this->messages = array_merge($this->messages, $dot_arr); } } }
言語テキスト
アプリの作成過程で使用する共通の言語テキストを準備します。個別の画面については、その都度に追加して行きます。
/apricot/assets/lang/ja
- messages.php
<?php return [ 'app'=>[ 'title'=>env('APP_NAME'), 'menu'=>[ 'menu1'=>'menu1', 'menu2'=>'Menu2', 'menu3'=>'Menu3', 'logout'=>'Logout', 'about_me'=>'About Me', ], ], 'success' => [ 'db' => [ 'insert' => 'データを登録しました', 'update' => 'データを更新しました', 'delete' => 'データを削除しました', ], ], 'error'=>[ 'unknown'=>'エラーが発生しました', 'db' => [ 'access' => 'データアクセスが失敗しました', 'insert' => 'データの登録が失敗しました', 'update' => 'データの更新が失敗しました', 'delete' => 'データの削除が失敗しました', 'optimisstic_lock'=>'データが他のユーザによって更新されています', ], ], ];
- app — アプリケーションのタイトルやメニュー
- success — 処理が成功した場合のメッセージ
- error — エラー用のメッセージ
Langクラス
Langクラスは 上のTranslationクラスをシングルトンにしたもので、以下のメソッドがあります。
使用法: Lang::{メソッド}
メソッド 機能 bool has(string $key) キーの存在確認 string get(string $key, array $params = []) 言語テキストの取得
ヘルパー関数
Langクラスのget()メソッドは良く使用されるのでヘルパー関数に追加しておきます。
/apricot/core/helpers
- boilerplates.php
if (! function_exists('__')) { /** * Returns the translated message specified by the dot-notation key. * * @param string $key dot-notation key * @param string $params * @return string translated Message */ function __($key, $params = []) { return Apricot\Lang::get($key, $params); } }
この関数名は __ です。2つ並んだアンダースコアはPythonプログラマーの間ではdunders
(double underscoreの意) と呼ばれ特別なクラス内メンバに付加されますが、ここではそのような意味はなくトランスレータを表す関数名としてLaravelに準じました。
apricot/usage/ja/frontend.1597194474.txt.gz · 最終更新: 2020/08/12 10:07 by y2sunlight
コメント
https://www.jordansneakerss.us/ https://www.jordan1.us.com/ https://www.newnikeshoes.us.com/ https://www.air-jordan4.us.com/ https://www.nikeair-jordan1.us.com/ https://www.huarachesnike.us.com/ https://www.christianslouboutin.uk.com/ https://www.new-jordans.us.com/ https://www.airjordan11s.us.com/ https://www.pandoraonline.us/ https://www.jordan-4.us.com/ https://www.air-jordans11.us.com/ https://www.ferragamos.us.org/ https://www.jordan12retro.us.com/ https://www.outletnikestore.us.com/ https://www.jordan12retros.us/ https://www.retrosjordans.us/ https://www.yeezys-shoes.us.org/ https://www.jordans4retro.us/ https://www.nikeair-maxs.us.com/ https://www.pandorajewellery.us.com/ https://www.mensnikeshoes.us.com/ https://www.kyrieirving-shoes.us.org/ https://www.nikeairmax-shoes.us.com/ https://www.jacketsmoncleroutlet.us.com/ https://www.pandoraringssite.us/ https://www.goldengoosesales.us.com/ https://www.nikeofficialwebsite.us.com/ https://www.jordan11red.us.com/ https://www.nikeshoesoutletfactory.us.com/ https://www.redbottomshoesforwomen.us.com/ https://www.jordan13.us.org/ https://www.jordan-retro1.us.com/ https://www.ggdbsneakers.us.com/ https://www.sneakersgoldengoose.us.com/ https://www.jordanretro11mens.us/ https://www.nikesfactory.us.com/ https://www.nike-jordans.us.com/ https://www.outletgoldengoose.us.com/ https://www.nikesales.us.com/ https://www.airjordan5.us/ https://www.christianslouboutinshoes.us.com/ https://www.jordan-12.us.com/ https://www.jordan13s.us/ https://www.jordan11sshoes.us/ https://www.birkin-bag.us.com/ https://www.nikeshoesforwomens.us.com/ https://www.goldengoosessneakers.us.com/ https://www.ggdbshoes.us.com/ https://www.yeezys.com.co/ https://www.airjordanretro11.us.com/ https://www.airmax270s.us.com/ https://www.asics-running-shoes.us.com/ https://www.jordans5.us/ https://www.airjordanshoess.us.com/ https://www.jordansretro3.us/ https://www.pandorascharms.us.com/ http://www.pandorarings.us.com/ https://www.valentinosshoes.us.org/ https://www.air-jordan6.us/ https://www.nikesoutletstoreonlineshopping.us.com/ https://www.air-jordansneakers.us/ https://www.goldengooseshoess.us.com/ https://www.nikeairjordan.us.com/ https://www.goldengoosesneakerss.us.com/ https://www.redbottomshoeslouboutin.us.com/ https://www.pandora-braceletcharms.us/ https://www.jordans-sneakers.us.com/ https://www.nike--shoes.us.com/ https://www.airjordansneakers.us.com/ https://www.ggdbs.us.com/ https://www.goldengoosemidstar.us.com/ https://www.newjordansshoes.us.com/ https://www.airjordan3s.us/ https://www.jordans1s.us.com/ https://www.jordan-shoesformen.us.com/ https://www.monclervest.us.com/ https://www.monclerjacketsstore.us.com/ https://www.jordansshoesforsale.us.com/ https://www.vanscom.us.com/ https://www.shoeslouboutin.us.com/ https://www.goldensgoose.us.com/ https://www.fitflop-shoes.us.org/ https://www.airmax-95.us.com/ https://www.nikeoutletstoresonlineshopping.us.com/ https://www.nikeoutletshoes.us.com/ https://www.balenciagaofficial.us.com/ https://www.retrosairjordan.us/ https://www.jordanretros.us.com/ https://www.redbottomslouboutin.us.org/ https://www.airjordan4s.us/ https://www.pandorasjewelry.us.com/ https://www.jordan-retro6.us/ https://www.adidasnmdr1.us.org/ https://www.jordanshoesretro.us.com/ https://www.jordans11.us.com/ https://www.goldengooseoutletfactory.us.com/ https://www.jordanretro-11.us.com/ https://www.jamesharden-shoes.us.org/ https://www.yeezys-shoes.us.com/ https://www.nike-airmax2018.us.com/ https://www.newjordan11.us/ https://www.airforceoneshoes.us.com/ https://www.jordanshoess.us.com/ https://www.jordan1lows.us.com/ https://www.jordan11low.us.com/ https://www.soccercleats.us.com/ https://www.jordan14.us.com/ https://www.nikefactoryoutlets.us.org/ https://www.pandoracanadajewelry.ca/ https://www.canadapandoracharms.ca/ https://www.pandorajewelryofficialsite.us.com/ https://www.jordan10.us.com/ https://www.air-jordanssneakers.us/ https://www.louboutinshoesheels.us.com/ https://www.nikesnkrs.us.com/ https://www.jordan9.us.com/ https://www.air-jordan6.us.com/ https://www.christianlouboutinshoesinc.us.com/ https://www.jordans1.us.com/ https://www.airjordan6rings.us/ https://www.jordans-4.us/ https://www.jordan5.us.com/ https://www.airjordansnew.us.com/ https://www.adidasyeezysshoes.us.com/ https://www.nikeairmax98.us/ https://www.fjallraven-kanken.us.com/ https://www.jordansretro12.us/ https://www.pandoras.us.com/ https://www.adidasyeezysneakers.us.com/ https://www.monclercom.us.com/ https://www.christian-louboutinheels.us.com/ https://www.coatsmoncler.us.com/ https://www.nikeoutletfactorys.us.com/ https://www.eccos.us.com/ https://www.jordan-8.us/ https://www.airmax270.us.org/ https://www.nikeshoes-cheap.us.com/ https://www.airjordan1s.us.org/ https://www.yeezy.us.org/ https://www.retro-jordans.us/ https://www.monclerstores.us.com/ https://www.lebron-shoes.us.com/ https://www.nmds.us.com/ https://www.jordans-11.us/ https://www.jordan1universityblue.us.com/ https://www.air-jordan12.us/ https://www.jordan11ssneakers.us/ https://www.air-jordan1s.us.com/ https://www.yeezyonline.us.com/ https://www.balenciagatriples.us.org/ https://www.air-max90.us.com/ https://www.jordanscheapshoes.us/ https://www.pandorajewelryofficial-site.us/