スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

zendで、特定のアクションではZend_Layoutを使わないようにする方法

通常、同じレイアウトの部分をZend_Layoutを使って共通化すると管理が楽になります。
ただ、使いたく無い場合もあるのでそんな時のメモ。


public indexAction()
{
Zend_Layout::resetMvcInstance();
}

とアクション部分に1行書けば、Zend_Layoutは使われずに、viewの部分だけ表示されます。

viewも使いたく無い場合は

$this->_helper->viewRenderer->setNoRender();

この1行でOKらしい。

参考サイト

特定のアクションではZend_Layoutを使わない
スポンサーサイト

Zend_Db_Select でWHERE句に副問合せ(subquery)

迷ったのでメモ

$subselect = $db->select()
->from(array('a'=>'table'))
->where('a.id = s.id')
->where('a.name = ?', 'test');

$select = $db->select()->from(
array("s" => "table2"),
array("s.id","s.name"))
->where("exists ($subselect)");


出力結果

select s.id, s.name
from table2 s
where exists(
select * from table a
where a.id = s.id
and a.name = 'test'
)

Zend_Db_Select でFROM句に副問合せ(subquery)

すごい迷ったのでメモ。


$selectA = $db->select()
->from(array('u' => 'user'), 'name')
->where('u.id >= 5');

$selectB = $db->select()
->from(array('u' => 'user'), 'name')
->where('u.id < 5');
$sqla = $db->select()->union(array($selectA, $selectB));

$select = $db->select()
->from(
array('u2' => $sqla),
array('cnt' => 'COUNT(*)')
);;

echo $select->__toString().'
';


出力SQL

SELECT COUNT(*) AS "cnt"
FROM (SELECT "u"."name"
FROM "user" AS "u"
WHERE (u.id >= 5) UNION
SELECT "u"."name"
FROM "user" AS "u"
WHERE (u.id < 5)
) AS "u2"

Zend_Db で 固定値を設定する方法

Zend FrameworkのZend_Dbでは勝手に、テーブルのエイリアスとかをつけてくれる。
ただ、いらないときもあるので、そのメモ。

普通だと

// できあがるクエリは、このようになります
// SELECT p."product_id", p."product_name"
// FROM "products" AS p

$select = $db->select()
->from(array('p' => 'products'),
array('product_id', 'product_name'));


これを

// SELECT p."product_id", p."product_name", 0 as etc_column
// FROM "products" AS p

みたいな感じにしたい場合


$select = $db->select()
->from(array('p' => 'products'),
array('product_id',
             'product_name',
             'etc_column' => '(0)',
)
        );


のように、カラム名の後ろに
=> でつなげる。
()で括らないと、エイリアス名がついてしまうので注意。

zendの自作ヘルパーの作り方

Zend Frameworkで自作ヘルパーの作り方のメモ。

Fooと言うクラスを作る場合。


  1. ヘルパー名とビューヘルパーのクラス名の最後の部分は同じにする

    class My_View_Helper_Foo


  2. ビューヘルパーのクラスにはヘルパー名と同じ名前のpublicメソッドが定義されている

    class My_View_Helper_Foo
    {
    ...
    public function foo($input) {
    ...
    }
    ...
    }



  3. メソッド内ではechoとかprintを行ってはいけない。printやechoされる内容をエスケープして返す

    ビューヘルパー内で出力するのではなく、ビュースクリプトにて

    <?php echo $this->foo($this->name); ?>

    のように出力するようにします。クラスのメソッド内では、エスケープ済みの結果を返すようにするだけです。

    class My_View_Helper_Foo
    {
    ...
    public function foo($input) {
    ...
    return htmlspacealchars($output)
    }
    ...
    }



  4. クラスはヘルパーと同じ名前のファイルに作成する

    今回の場合は、Foo.phpというファイルにクラスを定義します。



以上の条件をみたしていれば、ビューヘルパーのパスのどこかにファイルを置いておくだけで自動的に読み込み、インスタンス化してくれます。ビューヘルパーのパスを追加するには、Zend_ViewクラスのsetHelperPath()を使います。

IndexController.php 内とかで

$view = new Zend_View();

$view->setHelperPath('/path/to/helpers', 'My_View_Helper');
?>

この時、Foo.php は/path/to/helpers 配下にある。

view 側では

<?php echo $this->foo($this->value); ?>


参考にしたのはココ

プロフィール

U2K

Author:U2K
いろいろプログラムに関しての覚え書きをちょくちょくと書いていきます。

オススメ










オススメ

忍者AdMax

u2k on Twitter

最近の記事


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。