Smarty3 + CakePHP3로 쉽게 파일 출력
하고 싶은 일
템플릿 파일을 준비하고 사용자가 양식에서 입력한 값을 포함하고 싶습니다!
그리고 값을 포함한 결과를 파일 출력하고 싶다!
환경
CakePHP: 3.5.6
CentOS: 7.4
Smarty: 3.1
Smarty를 만진 적이 없었기 때문에, 만져 보는 것에.
절차
Smarty 설정
composer에서 설치
composer require smarty/smarty:~3.1
디렉토리 작성
smarty-sample/ ・・・CakeのROOTディレクトリ
smarty/
templates/ ・・・テンプレートファイル(.tpl)の設置先
templates_c/ ・・・コンパイル結果出力先
cache/ ・・・キャッシュファイル出力先
files/ ・・・テンプレート埋め込み後のファイル保存先
apache 사용자가 쓸 수 있도록 합니다.
chmod 0777 smarty/templates_c smarty/cache/
chmod 0777 files
PATH 설정
사용하기 쉽도록 paths.php에 씁시다.
// config/paths.phpに追記
# Smarty用ディレクトリ
define('SMARTY_TEMPLATE_DIR', ROOT . DS . 'smarty' . DS . 'templates' . DS);
define('SMARTY_COMPILE_DIR', ROOT . DS . 'smarty' . DS . 'templates_c' . DS);
define('SMARTY_CACHE_DIR', ROOT . DS . 'smarty' . DS . 'cache' . DS);
define('SMARTY_CONFIG_DIR', ROOT . DS . 'smarty' . DS . 'config' . DS);
# ファイル出力用ディレクトリ
define('FILE_DIR', ROOT . DS . 'files' . DS);
클래스 확장
<?php
namespace App\Lib;
use Smarty;
class AppSmarty extends Smarty
{
function __construct()
{
parent::__construct();
// paths.phpに書いた値を使って初期化
$this->template_dir = SMARTY_TEMPLATE_DIR;
$this->compile_dir = SMARTY_COMPILE_DIR;
$this->config_dir = SMARTY_CONFIG_DIR;
$this->cache_dir = SMARTY_CACHE_DIR;
}
}
?>
이제 AppSmarty를 use해 주면 이용 가능합니다!
샘플
드디어 샘플을 만들었습니다.
tpl 파일
smarty/templates/hello.tpl
私の名前は {$name} です!
{$comment}
◯ 食べたいもの
{foreach $favorites as $key => $val}
・{$val}
{/foreach}
smarty/templates/hello2.tpl
名前: {$name}
コメント: {$comment}
好きな食べ物:
{foreach $favorites as $key => $val}
・{$val}
{/foreach}
배열을 전달할 수도 있습니다.
컨트롤러
TutorialController.php
<?php
namespace App\Controller;
use App\Controller\AppController;
// AppSmartyの読み込み
use App\Lib\AppSmarty;
use Cake\Filesystem\File;
class TutorialController extends AppController
{
public function add()
{
if ($this->request->is('post')) {
// 1. インスタンスを作成
$smarty = new AppSmarty();
// 2. リクエストデータを変数を割り当て
// $this->assign(template内変数, 割り当てる値)
foreach ($this->request->getData() as $key => $val) {
$smarty->assign($key, $val);
}
// 3. fetch('template file')で変数の割当後の値を取得
// assignした値を使って複数のtemplateを利用することができる
$hello1 = $smarty->fetch('hello1.tpl');
$hello2 = $smarty->fetch('hello2.tpl');
// 4. Fileユーティリティを利用して結果を出力
(new File(FILE_DIR . 'hello1.txt'))->write($hello1);
(new File(FILE_DIR . 'hello2.txt'))->write($hello2);
}
}
}
보기
add.ctp
<fieldset>
<?= $this->Form->create(
null,
[
'url' => [
'controller' => 'Tutorial',
'action' => 'add'
]
]) ?>
<?= $this->Form->input('name') ?>
<?= $this->Form->input('comment') ?>
<?= $this->Form->select(
'favorites',
[
['text' => 'カレー', 'value' => 'カレー'],
['text' => 'カツ丼', 'value' => 'カツ丼'],
['text' => '焼肉', 'value' => '焼肉'],
],
[
'multiple' => 'checkbox'
]
) ?>
<?= $this->Form->button(__('submit')) ?>
<?= $this->Form->end() ?>
</fieldset>
현재 21:30. 식욕이 ctp 파일에 여실히 나타납니다.
post해봐
Let's post! !
결과
[fusic@localhost smarty-sample]$ cat files/hello1.txt
私の名前は koga です!
お腹すいた。。
◯ 食べたいもの
・カレー
・焼肉
[fusic@localhost smarty-sample]$ cat files/hello2.txt
名前: koga
コメント: お腹すいた。。
好きな食べ物:
・カレー
・焼肉
값이 포함된 결과가 제대로 출력되었습니다! !
요약
참고 링크
Smarty3 매뉴얼
폴더 및 파일
Reference
이 문제에 관하여(Smarty3 + CakePHP3로 쉽게 파일 출력), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/koga1020/items/f2071bf0d1ab1602d359텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)