0

私はcodeigniterを使用していて、渡したパラメーターに基づいて別のビューを呼び出すメインビューがあるため、たとえば、コントローラーから次のようなものを渡すことができます。

$data['view'] = 'login';

$this->load->view('main', $data);

これはすべてうまく機能し、ダンディですが、エラーページを同じように渡そうとしています。エラーページには、ビューを設定してからメインビューを呼び出すコントローラーに似たものがあります。

これは、ビューをまだ処理していない場合、たとえばコントローラーでPHPエラーが発生した場合に正常に機能します。ただし、ビューでエラーが発生すると、メインビューが2回処理されます(したがって、html / head / bodyタグが2回処理されます)

メインビューなしでエラーページを吐き出すと、コンテンツはどこにでも移動する可能性があります。たとえば、タイトルタグなどです。そのため、ページ全体を再生成する必要があります。

現在のビューを処理している最中であることを知っているので、現在出力を生成しているものの出力をクリアすることは実際には意味がありませんが、とにかくこれを行うことはできます。エラーページが表示されたら、生成されたものをすべてクリアしてから、エラーページから何でも出力するという意味ですか?

4

3 に答える 3

1

データ文字列は良い考えですが、私はアプリで何も書き直したくありませんでした。約200ビューが必要です。

私は最終的にPHPのオブジェクトバッファーで遊んで、これを各エラーファイルの先頭に配置しました。

ob_end_clean();
ob_end_flush();
@ob_clean();

ob_start();
ob_clean();

//show code

exit();
于 2012-05-31T13:47:03.897 に答える
0

ビューをブラウザに送信するのではなく、データとして返すことで文字列を作成できます。

$output = $this->load->view('my_view', $data, TRUE);

次に、最後に、最終的な出力文字列を設定します。

$this->output->set_output($output);
于 2012-05-30T22:29:39.057 に答える
0

ビュー内でビューを呼び出すことができます。

だから、あなたがそこであなたの言うことをするなら、あなたのコントローラーで:

$data['view'] = 'login';
$this->load->view('main', $data);

次に、main.phpビューファイル内で、次のようなことを行うことができます。

<? if(isset($view)):
$this->load->view($view);
endif;?>

その部分のメインビューに複数の値を送信する場合は、ネストされたifまたはswitchステートメントも使用できます。おそらく、それが私の役割であるという理由だけで、すべてをコンテナーdivでラップします。エラーが発生した場合は、パスを調整するだけです。

于 2012-05-31T00:58:20.497 に答える