PHP:プロになるためのPHPプログラミング入門 サンプル環境構築 3

公開:2026.05.17(日) 00:08

プロになるためのPHPプログラミング入門 サンプル環境構築

リスト 1-1 文字エンコーディングをチェックするプログラムの例 (P.42)

リスト 1-2 マルチバイト文字列関数を使うプログラムの例 (P.43)
リスト 1-3 テンプレートファイル (P.55) リスト 1-4 プログラムファイル (P.56)
http://localhost:8080/prophp_sample/ppa/p15flexy.php

Twigへの置換が必要。

◆ p15flexy.html
<html>
<body>
<h1>{{ val }}</h1>
</body>
</html>

◆ p15flexyif.html
<?php
require_once '../../vendor/autoload.php';

define('TEMPLATE_PATH', '../../templates');

$oobj = ['val' => '楽しい夏休み'];

$loader = new \Twig\Loader\FilesystemLoader(TEMPLATE_PATH);
$twig = new \Twig\Environment($loader);

echo $twig->render('p15flexy.html', $oobj);

リスト 1-6 PpPageクラス (P.60)
リスト 1-7 テンプレートファイル (P.61)
リスト 1-8 プログラムファイル (P.62)
Twigへの置換が必要。

◆ PpPage.php
<?php
require_once '../../vendor/autoload.php';
define('TEMPLATE_PATH', '../../templates');	//	テンプレートファイルを置くフォルダ
//------------------------------//
//!	ページ表示クラス
class PpPage {
	protected $twig = null;  // Twigオブジェクト

	//!	コンストラクタ
	public function __construct() {
		//	E_DEPRECATEDとE_STRICTのメッセージを非表示にする
		if(defined('E_DEPRECATED')){
			error_reporting(error_reporting() & ~(E_DEPRECATED | E_STRICT));
		}

		$loader = new \Twig\Loader\FilesystemLoader(TEMPLATE_PATH);

		$this->twig = new \Twig\Environment($loader, [
			'cache' => '/var/cache',
			'debug' => true,
		]);
	}

	//!	@param	string	$tmpl	テンプレートファイル名
	//!	@param	array	$elem	HTML要素出力データ
	public function display($tmpl, array $elem = array()) {
		echo $this->twig->render($tmpl, $elem);
	}
}

◆ p15flexyform.html
selectへの項目(option)追加は {% for … %} によるループが必要
checked属性の追加は それぞれの項目で対応が必要
{{- kcomm -}} の "-" は前後のスペースを取り除くためのもの
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>ピザの注文</title>
</head>
<body>
<form name="pform" method="post" action="p15flexyform.php">
<p>生地の種類:
<select name="pbase" id="pbase">
  {% for value, label in pkind %}
  <option value="{{ value }}" {{ pbase == value ? 'selected' : '' }}>
    {{ label }}
  </option>
  {% endfor %}
</select>
</p>
<p>サイズ:<br>
<input type="radio" name="psize" value="1" {{ psize  == 1 ? 'checked': '' }}>大
<input type="radio" name="psize" value="2" {{ psize  == 2 ? 'checked': '' }}>中
<input type="radio" name="psize" value="3" {{ psize  == 3 ? 'checked': '' }}>小
</p>
<p>トッピング:<br>
<input type="checkbox" name="ptop[]" value="1" {{ '1' in ptop ? 'checked': '' }}>ペパロニ
<input type="checkbox" name="ptop[]" value="2" {{ '2' in ptop ? 'checked': '' }}>アンチョビ
<input type="checkbox" name="ptop[]" value="3" {{ '3' in ptop ? 'checked': '' }}>トマト
<input type="checkbox" name="ptop[]" value="4" {{ '4' in ptop ? 'checked': '' }}>ピーマン
<input type="checkbox" name="ptop[]" value="5" {{ '5' in ptop ? 'checked': '' }}>バジル
</p>
<p>お名前:<br>
<input name="kname" size="40" maxlength="30" value="{{ kname }}">
</p>
<p>連絡事項:<br>
<textarea name="kcomm" cols="{{ kcomm_attr.cols }}" rows="{{ kcomm_attr.rows }}">
  {{- kcomm -}}
</textarea>
</p>
<input type="submit" value="注文する">
</form>
</body>
</html>

p15flexyform.php
<?php
require_once 'ppPage.php';

$elems = [
  'pkind' => [
    1 => 'モッチモチ! 弾力がある厚めの生地です',
    2 => 'パリパリッ! 薄い生地がお好きな方はどうぞ',
    3 => 'サクットロ~! サクッとした生地の中にはトロ~リチーズ'    
  ],
    'pbase'   => 2,
    'psize'   => 3,
    'ptop'    => ['2', '3'],
    'kname'   => 'お名前を入力してください',
    'kcomm'   => '連絡事項を入力してください',
    'kcomm_attr' => ['cols' => 40, 'rows' => 10]  
];

$page = new PpPage;
$page->display('p15flexyform.html', $elems);


0 件のコメント:

その他の記事