トップ  > メモ一覧  > カテゴリ「ソース・表現」の絞り込み結果 : 7件

7件中 1 〜 7 表示  1 

No.3543 view以外でhelper関数を使う例

view以外でhelper関数を使う例

sfContext::getInstance()->getConfiguration()->loadHelpers('Escaping');
return sfOutputEscaper::escape(sfConfig::get('sf_escaping_method'), $result);
更新:2011/04/01 23:57 カテゴリ: symfony  > ソース・表現 ▲トップ

No.1596 symfony1.2でtaskから実行されたメソッドかWeb側で実行されたメソッドかを判定する小技

symfony1.2でtaskから実行されたメソッドかWeb側で実行されたメソッドかを判定する小技


symfonyで開発をしていると、taskから呼び出された場合と、Web側で実行された際に呼び出された場合とで、実行させる処理を切り分けたい場合がたまーに出てきます。
こんなときに処理を切り分けるための小技を紹介したいと思います。

自分が実際にこの切り分けが必要になったのはこんな状況。

・とある登録ページでレコードを作成
・そのレコードを大量に参照する集計ページが必要
・集計ページを開いた瞬間に集計し計算すると、とーーっても重い
・こまった
・集計結果用テーブルを作り、レコードの登録時にmodelのpostSave()で関連する部分だけ集計しておくことに。
・集計ページは集計済みのテーブルを表示するだけなのでめっちゃ軽い!
・解決ッ!

でもここで問題が発生。
上記の処理の追加後に、symfony:build-all-reload を使用してテストデータを読み込んでみると、膨大なテストレコードがsaveされるたびに集計処理を実行してしまい、テストデータのインポートがいつまでたっても終わらないっ! あわわわわ
ここでtaskからの処理とWebからの処理が必要になったというお話でした。


そしてこの処理を切り分ける方法をいろいろ考えていたのですが、最終的に以下のように実装しています。

  1. <?php
  2. // レコードのモデルクラス内
  3.  
  4.  
  5. public function postSave($event) 
  6. {
  7.   try {
  8.     
  9.     sfContext::getInstance();
  10.     
  11.   } catch (Exception $e) {
  12.  
  13.     // 例外がcatchされたらtaskからの処理
  14.     return;
  15.     
  16.   }
  17.   
  18.   // 例外が出なければWebからの処理
  19.   doShuukei();
  20.   
  21. }
  22.  

これに加えて、まとめて集計をおこなうtaskを一つ作成し、テストデータのインポート後に実行することで今度こそ解決。

もっとシンプルに判定する方法が用意されてるのかもしれませんが、調べてもわからなかったのでこんな怪しげな感じになりました。
まあ、ちゃんと動いてるようだし大丈夫だろう。うん。

引用元

更新:2009/10/09 08:11 カテゴリ: symfony  > ソース・表現 ▲トップ

No.818 テンプレート:記述

◆if
<?php if () : ?>
<?php elseif(): ?>
<?php else: ?>
<?php endif; ?>
◆foreach
<?php foreach ($bbs_list as $bbs): ?>
<tr>
  <td><a href="<?php echo url_for('bbs/show?id='.$bbs->getId()) ?>"><?php echo $bbs->getId() ?></a></td>
  <td><?php echo $bbs->getTitle() ?></td>
  <td><?php echo $bbs->getBody() ?></td>
</tr>
<?php endforeach; ?>

◆日本語
<?php echo __('フッター設定') ?>
◆form
<form action="<?php echo url_for('design/editFooter') ?>" method="post">
<table>
<?php echo $form ?>
<tr>
<td colspan="2"><input type="submit" value="<?php echo __('設定変更') ?>" /></td>
</tr>
</table>
</form>
◆各カラムの値
$bbs->getTitle()   ・・・get+カラム名で取得!
<?php echo $bbs->getUpdatedAt('Y/m/d H:i') ?>  ・・・日付を整形して出力
◆ユーティリティー
●nlbr2(改行):
<?php echo simple_format_text($bbs->getBody()) ?>
※改行を<br />へ置き換えます。 このヘルパーはTextヘルパーグループに属しており、 デフォルトではロードされないのでuse_helper()ヘルパーを使って手動でロードさせる必要アリ

●ヘルパーの呼び出し
<?php use_helper('Text') ?>
◆スロット
apps/frontend/templates/layout.php
<p class="pan"><a href="<?php echo url_for('bbs/index') ?>">トップ</a><?php include_slot('pan') ?></p>
apps/frontend/modules/bbs/templates/indexSuccess.php
<?php slot(
'pan',
sprintf('&nbsp;&gt;&nbsp;%s', '書き込み一覧'))
?>

◆CSSの個別呼び出し
<?php use_stylesheet('main.css') ?>

更新:2009/05/17 13:25 カテゴリ: symfony  > ソース・表現 ▲トップ

No.876 管理画面でのメッセージ表示

$this->getUser()->setFlash('notice', 'メッセージ内容')

【例】apps/pc_backend/modules/design/actions/actions.class.php
class designActions extends sfActions
{
  public function executeFooter(sfWebRequest $request)
  {
    $this->type = $request->getParameter('type');
    $this->forward404Unless(in_array($this->type, array('before', 'after')));

    $option = array();
    $option['type'] = $this->type;
    $this->form = new DesignFooterForm(array(), $option);
    if ($request->isMethod('post'))
    {
      $params = $request->getParameter('design_footer');
      $this->form->bind($params);
      $this->form->save();
      $this->getUser()->setFlash('notice', 'Footer design is changed.');
      $this->redirect('design/footer?type=' . $this->type);
    }
  }
}

更新:2009/05/08 01:35 カテゴリ: symfony  > ソース・表現 ▲トップ

No.830 action内の記述

◆リクエストパラメータ
$request->getParameter('id')
$this->category = $request->getParameter('category', 'general');
1:対象 2:デフォルト値
参:develop.ddo.jp/symfony/book/jp/1.0/parameter_holder.html


◆404エラー
$this->forward404Unless($this->bbs);
$this->forward404If(!$this->bbs);

if (!$this->job)
{
  $this->forward404();
}

$this->forward('default', '404');
更新:2009/05/07 19:37 カテゴリ: symfony  > ソース・表現 ▲トップ

No.851 form:ヘルパーによる記述

form_tag()ヘルパ 
<?php echo form_tag('test/save') ?>
=> <form method="post" action="/path/to/save">
 
<?php echo form_tag('test/save', 'method=get multipart=true class=simpleForm') ?>
=> <form method="get" enctype="multipart/form-data" class="simpleForm"action="/path/to/save">

 


◆標準のフォームヘルパの構文
// テキストフィールド(入力)
<?php echo input_tag('name', 'default value') ?>
=> <input type="text" name="name" id="name" value="default value" />
 
// すべてのフォームヘルパは追加オプションのパラメータを受け取る
// これによってカスタム属性を生成タグに追加できる
<?php echo input_tag('name', 'default value', 'maxlength=20') ?>
=> <input type="text" name="name" id="name" value="default value" maxlength="20" />
 
// 長いテキストフィールド(テキストエリア)
<?php echo textarea_tag('name', 'default content', 'size=10x20') ?>
=> <textarea name="name" id="name" cols="10" rows="20">
default content
</textarea>
 
// チェックボックス
<?php echo checkbox_tag('single', 1, true) ?>
<?php echo checkbox_tag('driverslicense', 'B', false) ?>
=> <input type="checkbox" name="single" id="single" value="1" checked="checked" />
<input type="checkbox" name="driverslicense" id="driverslicense" value="B" />
 
// ラジオボタン
<?php echo radiobutton_tag('status[]', 'value1', true) ?>
<?php echo radiobutton_tag('status[]', 'value2', false) ?>
=> <input type="radio" name="status[]" id="status_value1" value="value1" checked="checked" />
<input type="radio" name="status[]" id="status_value2" value="value2" />
 
// ドロップダウンリスト(選択)
<?php echo select_tag('payment',
'<option selected="selected">Visa</option>
<option>Eurocard</option>
<option>Mastercard</option>'
)
?>
=> <select name="payment" id="payment">
<option selected="selected">Visa</option>
<option>Eurocard</option>
<option>Mastercard</option>
</select>
 
// 選択タグのためのオプションのリスト
<?php echo options_for_select(array('Visa', 'Eurocard', 'Mastercard'), 0) ?>
=> <option value="0" selected="selected">Visa</option>
<option value="1">Eurocard</option>
<option value="2">Mastercard</option>
 
// オプションのリストと結びつけられたドロップダウンヘルパオプションのリスト
<?php echo select_tag('payment', options_for_select(array(
'Visa',
'Eurocard',
'Mastercard'
), 0)) ?>
=> <select name="payment" id="payment">
<option value="0" selected="selected">Visa</option>
<option value="1">Eurocard</option>
<option value="2">Mastercard</option>
</select>
 
// オプション名を指定するため、連想配列を使う
<?php echo select_tag('name', options_for_select(array(
'Steve' => 'Steve',
'Bob' => 'Bob',
'Albert' => 'Albert',
'Ian' => 'Ian',
'Buck' => 'Buck'
), 'Ian')) ?>
=> <select name="name" id="name">
<option value="Steve">Steve</option>
<option value="Bob">Bob</option>
<option value="Albert">Albert</option>
<option value="Ian" selected="selected">Ian</option>
<option value="Buck">Buck</option>
</select>
 
// 複数の選択を持つドロップダウンリスト(選択された値は配列が可能)
<?php echo select_tag('payment', options_for_select(
array('Visa' => 'Visa', 'Eurocard' => 'Eurocard', 'Mastercard' => 'Mastercard'),
array('Visa', 'Mastercard'),
), array('multiple' => true))) ?>
 
=> <select name="payment[]" id="payment" multiple="multiple">
<option value="Visa" selected="selected">Visa</option>
<option value="Eurocard">Eurocard</option>
<option value="Mastercard">Mastercard</option>
</select>
// 複数の選択を持つドロップダウンリスト(選択された値は配列が可能)
<?php echo select_tag('payment', options_for_select(
array('Visa' => 'Visa', 'Eurocard' => 'Eurocard', 'Mastercard' => 'Mastercard'),
array('Visa', 'Mastercard')
), 'multiple=multiple') ?>
=> <select name="payment[]" id="payment" multiple="multiple">
<option value="Visa" selected="selected">Visa</option>
<option value="Eurocard">Eurocard</option>
<option value="Mastercard" selected="selected">Mastercard</option>
</select>
 
// アップロードファイルフィールド
<?php echo input_file_tag('name') ?>
=> <input type="file" name="name" id="name" value="" />
 
// パスワードフィールド
<?php echo input_password_tag('name', 'value') ?>
=> <input type="password" name="name" id="name" value="value" />
 
// 隠しフィールド
<?php echo input_hidden_tag('name', 'value') ?>
=> <input type="hidden" name="name" id="name" value="value" />
 
// 投稿ボタン (テキストとして)
<?php echo submit_tag('Save') ?>
=> <input type="submit" name="submit" value="Save" />
 
// 投稿ボタン (画像として)
<?php echo submit_image_tag('submit_img') ?>
=> <input type="image" name="submit" src="/images/submit_img.png" />
※ラジオボタンに関して、デフォルトではid属性はname属性の値ではなく、名前と値の組み合わせに設定されます。 自動化された"別のものを選択したときに以前の選択を解除する"機能を手に入れるために同じ名前を持ついくつかの ラジオボタンのタグを用意する必要があるからで、id=nameの慣習によれば、厳密には禁止されている、ページ内で id属性を持つHTMLタグが存在することを意味します。
フォーム投稿の扱い方

フォームを通してユーザによって投稿されたデータをどのように読み取りますか?リクエストパラメータで利用できるので、アクションは値を取得するために$request->getParameter($elementName)を呼び出すことが必要なだけです。

フォームを表示して処理するためのよい習慣は同じアクションを使うことです。リクエストメソッド(GETもしくはPOST)に従い、フォームのテンプレートが呼び出されるもしくはフォームが処理されるとリクエストは別のアクションにリダイレクトされます。

 
// mymodule/actions/actions.class.phpにおいて
public function executeEditAuthor($request)
{
if (!$this->getRequest()->isMethod('post'))
{
// フォームを表示する
return sfView::SUCCESS;
}
else
{
// フォーム投稿を取り扱う
$name = $request->getParameter('name');
...
$this->redirect('mymodule/anotheraction');
}
}
 

これを機能させるために、フォームのターゲットは表示するアクションと同じアクションでなければなりません。

 
// mymodule/templates/editAuthorSuccess.phpにおいて
<?php echo form_tag('mymodule/editAuthor') ?>

更新:2009/05/06 12:50 カテゴリ: symfony  > ソース・表現 ▲トップ

No.845 Propel フォームの基本

※propel:build-allpropel:build-forms をした時にクラスが作られる

更新:2009/05/06 01:27 カテゴリ: symfony  > ソース・表現 ▲トップ
7件中 1 〜 7 表示  1 

FuelPHP

Mac

web開発

プロマネ

マネタイズ

プレゼン

webサービス運用

webサービス

Linux

サーバ管理

MySQL

ソース・開発

svn・git

PHP

HTML・CSS

JavaScript

ツール, ライブラリ

ビジネス

テンプレート

負荷・チューニング

Windows

メール

メール・手紙文例

CodeIgniter

オブジェクト指向

UI・フロントエンド

cloud

マークアップ・テキスト

Flash

デザイン

DBその他

Ruby

PostgreSQL

ユーティリティ・ソフト

Firefox

ハードウェア

Google

symfony

OpenPNE全般

OpenPNE2

Hack(賢コツ)

OpenPNE3

リンク

個人開発

その他

未確認

KVS

ubuntu

Android

負荷試験

オープンソース

社会

便利ツール

マネー

Twig

食品宅配

WEB設計

オーディオ

一般常識

アプリ開発

サイトマップ

うずら技術ブログ

たませんSNS

rss2.0