私が読んだことから、Viewはできるだけシンプルにする必要があります。Codeigniter:セッションにアクセスするためのベストプラクティス
ビュー内のセッション変数にアクセスすることをお勧めしますか?
ie。
// in the view
<?php if ($this->session->userdata('is_logged_in') : ?>
// stuff
<?php endif; ?>
私が読んだことから、Viewはできるだけシンプルにする必要があります。Codeigniter:セッションにアクセスするためのベストプラクティス
ビュー内のセッション変数にアクセスすることをお勧めしますか?
ie。
// in the view
<?php if ($this->session->userdata('is_logged_in') : ?>
// stuff
<?php endif; ?>
あなたは(IMO良いことを)視野に入れ、「ロジック」のこれらの種類を入れたくない場合は、次のようにする必要がありますが、コントローラインチこのようにして、ビュー自体もきれいになります。
<?php if($logged_in): ?>
do stuff
<?php else: ?>
do different
<?php endif; ?>
$ logged_inはすべてのセッション作業を行うビューから来ています。 CIコントローラから継承した独自のコントローラを作成することで、クラスがコントローラを拡張したり、静的メソッドを持つ別のSessionクラスに抽象化したりすることができます。私はあなたが多くのセッション処理を行うならば、自分のロジックでCIコントローラを拡張するのが最もクリーンな方法だと思う。
実際の質問への直接的な答えは単純です:はい、ビュー内のセッション変数にアクセスすることは問題ありません。セッションまたは定期的なので、それはまさにその変数です。情報を保存する場所。
これは、ヘッダ内のビューの定義された領域にメッセージを表示するために$this->session->flashdata
を使用することで、非常に頻繁に行います。
なぜ私がこれを言うのは、あなたが本当に質問をスキップして「なぜ」あなたが質問したのか、「認証を確認するのに最適な場所はどこですか?このためにCadmusの答えが正しいと思いますが、もう一度、セッションの「データ」にアクセスする必要はないと思っていますが、認証の確認はコントローラのレベルで確実に行う必要があります。
この変数を使用すると、ヘルパーを使用することができます。そして、あなたはそれへのアクセスも好きなことができます。そして、あなたのヘルパーで、それがaccess_helper呼ばれ
<?php if (is_logged_in()) : ?>
<!--your html code -->
<?php else ?>
<!--more html code -->
<?php endif;?>
を、たとえば、あなたが持っている:
<?php
function is_logged_in() {
return $this->session->user_data('is_logged_in');
}
?>
ヘルパーからセッション変数にアクセスすることは不可能です。最も簡単なのは、ビューからセッション変数にアクセスすることです。
<?php if ($this->session->user_data('is_loggen_in'): ?>
<!-- HTML stuff -->
<?php endif; ?>
私の意見では、セッションはグローバル情報であるためMVCパターンの哲学には影響しないと私は考えています。
私はベストプラクティスについては確信していませんが、私はセッションとビューを処理する方法を提供したいと思います。 ユーザーが私のコントローラのコンストラクタにログインしているかどうかを確認するためにセッションデータを入れます。
次に、私は自動的に、そのコントローラからロードするページが自動的にセッションの取得を取得しているというセッション検証を取得します。
public function __construct() {
parent::__construct();
if (!$this->session->userdata('user_data')) {
return redirect('login');
} else {
redirect('dashboard');
}
$this->load->model('customer_model');
}
およびビューに対する成功または失敗メッセージの場合は、私はフラッシュデータを使用します。
private function _falshAndRedirect($successful, $successMessage, $failureMessage) {
if ($successful) {
$this->session->set_flashdata('feedback', $successMessage);
$this->session->set_flashdata('feedback_class', 'alert-success');
} else {
$this->session->set_flashdata('feedback', $failureMessage);
$this->session->set_flashdata('feedback_class', 'alert-danger');
}
return redirect('customer/view_customer');
}
ここで私はプライベート関数を使ってビューにメッセージを取得します。
あなたは関数を作成し、その関数は自動的に "セッションのカバー"を取得します。
希望すると、これが役立ちます。
おっと、はいJondavidjohnが正しいです。あなたの元の質問にも対処していないことを私はあまりにも心配していました。私は彼に同意します、ジョンに感謝します。 –
Jondavidjohnの答えに追加するには、ビュー内にビジネスロジックを入れない限り、何でも使用できます。あなたが言及したケースでは、私は '表示ロジック'と呼ばれるものを使用しています。コントロールステートメントは、コンテンツがどのように表示されるかを決定するものであり、ビジネスロジックではありません。 )。 – Shivaas