質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Zend Framework

Zend Frameworkは、PHP5で記述されたWebアプリケーションフレームワークです。Zend Frameworkには守らなければならない開発の規定というものは存在せず、MVCなどの複数のコンポーネントを提供しています。

Q&A

解決済

1回答

1667閲覧

new Zend_View()でインスタンスを生成した時に、View側の変数にnullがセットされてしまうのを防ぎたい。

loglog

総合スコア27

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Zend Framework

Zend Frameworkは、PHP5で記述されたWebアプリケーションフレームワークです。Zend Frameworkには守らなければならない開発の規定というものは存在せず、MVCなどの複数のコンポーネントを提供しています。

0グッド

1クリップ

投稿2017/03/09 04:17

###前提・実現したいこと
(開発環境)
ZendFramwork1.12.20
Apache2.4.16
PHP5.6.12
Windows7(32bit)

indexAction() で、
echo $view -> render('index.phtml');
のタイミングだけview側に変数をセットしたいが、
$view = new Zend_View();
の際にview側の変数にnullがセットされしまうの現象を回避したい。

###発生している問題・エラーメッセージ

↓ データが無い場合の判定と、ある場合の判定結果の2つが表示されてしまう。 ーーーーーーーーーーーーーーーーーーーー データがありません。(無い場合) 名前 電話番号 住所(ある場合) 山田 090-0000-0000 東京都 菊池 080-0000-0000 山形県 木下 070-0000-0000 富山県 ーー ↓ これだけ表示させたい ーーーーー 名前 電話番号 住所 山田 090-0000-0000 東京都 菊池 080-0000-0000 山形県 木下 070-0000-0000 富山県

###該当のソースコード
■IndexControllre
public function indexAction()
{

//データのセット
$data = array(
array(
'name' => '山田',
'tel' => '090-0000-0000',
'address' => '東京都'
),
array(
'name' => '菊池',
'tel' => '080-0000-0000',
'address' => '山形県'
),
array(
'name' => '木下',
'tel' => '070-0000-0000',
'address' => '富山県'
)
);

//インスタンスを生成し、index.phtmlにレンダーする。
$view = new Zend_View();
$view -> setScriptPath('../application/views/scripts/index');
$view -> person = $data;
echo $view -> render('index.phtml');
}

■index.phtml

<!DOCTYPE html> <html> <head> <title>住所録</title> </head> <body> <?php //データがあればforeachで取り出し、なければ「データがありません。」と表示する。 if($this -> person): ?> <table> <tr> <th>名前</th> <th>電話番号</th> <th>住所</th> </tr> <?php foreach ($this -> person as $value) : ?> <tr> <td><?php echo $this -> escape($value['name']); ?></td> <td><?php echo $this -> escape($value['tel']); ?></td> <td><?php echo $this -> escape($value['address']); ?></td> </tr> <?php endforeach; ?> </table>
<?php else: ?> <p>データがありません。</p> <?php endif; ?>

<?php //ダンプしてみる var_dump($this -> person); ?>

</body> </html>

###試したこと
1.var_dumpすると、以下のようにnullがセットされていることがわかった。

データがありません。

NULL
名前 電話番号 住所
山田 090-0000-0000 東京都
菊池 080-0000-0000 山形県
木下 070-0000-0000 富山県
array(3) { [0]=> array(3) { ["name"]=> string(6) "山田" ["tel"]=> string(13) "090-0000-0000" ["address"]=> string(9) "東京都" } [1]=> array(3) { ["name"]=> string(6) "菊池" ["tel"]=> string(13) "080-0000-0000" ["address"]=> string(9) "山形県" } [2]=> array(3) { ["name"]=> string(6) "木下" ["tel"]=> string(13) "070-0000-0000" ["address"]=> string(9) "富山県" } }

2.echo $view -> render('index.phtml'); をコメントアウトすると、「データがありません。」のみが表示される。

なので、「$view = new Zend_View();」時にindex.phtmlの変数personにnullがセットされてしまっているようです。
###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

参考:https://framework.zend.com/manual/1.10/ja/zend.controller.action.html

Note: デフォルトの挙動
デフォルトでは、フロントコントローラ は ViewRenderer アクションヘルパーを有効にします。このヘルパーは、 ビューオブジェクトをコントローラに注入し、 ビューを自動的にレンダリングします。 アクションコントローラでこれを無効にするには、 以下のいずれかの方法を使用します。

public function init()
{
// 全体で自動レンダリングを無効にします
$this->_helper->removeHelper('viewRenderer');
}

自動レンダリングによって、インスタンス生成時にnull値が渡されていたみたいです。
自動レンダリングを無効化したことで解決しました。

投稿2017/03/10 03:03

loglog

総合スコア27

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問