2010-12-26 4 views
1

내가 읽은 것부터보기는 가능한 한 간단해야합니다.Codeigniter : 세션에 액세스하는보기에 대한 우수 사례

보기에서 세션 변수에 액세스하는 것이 좋습니까?

즉. 당신이 (IMO 좋은 일을)보기에 "논리"이런 종류의를 넣어하지 않으려면

// in the view 
<?php if ($this->session->userdata('is_logged_in') : ?> 
    // stuff 

<?php endif; ?> 

답변

3

, 당신은에 있지만 컨트롤러가 필요합니다. 이렇게하면보기 자체가 더 깨끗해집니다.

<?php if($logged_in): ?> 
do stuff 
<?php else: ?> 
do different 
<?php endif; ?> 

$ logged_in은 모든 세션 작업을 수행하는 뷰에서 발생합니다. CI 컨트롤러에서 확장 한 자체 컨트롤러를 작성하여 클래스가 컨트롤러를 확장하거나 일부 정적 메서드가 포함 된 별도의 Session 클래스로 추상화 할 수 있습니다. 나는 당신이 많은 세션 처리를하는 경우 자신의 논리로 CI 컨트롤러를 확장하는 것이 가장 깨끗한 방법 인 것 같다.

4

실제 질문에 대한 대답은 간단합니다. 예,보기 내 세션 변수에 액세스하는 것이 좋습니다. 세션 또는 정기적이기 때문에, 그것들은 바로 변수입니다. 정보를 저장할 장소.

헤더 내부의보기에 정의 된 영역에 메시지를 표시하기 위해 $this->session->flashdata을 사용하여이 작업을 자주 수행합니다.

내가 말하는 이유는 다른 사람들이 실제 질문을 건너 뛰고 '왜'질문을했는지 '인증을 확인하는 가장 좋은 곳은 어디입니까?'라고 묻기 때문입니다. Cadmus의 대답이 내가 이것을 어떻게 처리하는지에 대한 머리에 맞지만, 다시보기에서 세션 "데이터"에 액세스해서는 안된다고 생각하지만 인증을 위해 컨트롤러 수준에서 확인이 필요합니다. .

+0

죄송합니다. 예 Jondavidjohn이 맞습니다. 나는 당신이 원래의 질문조차도 다루지 않았 음을 당신에게 너무 지나치게 염려했습니다. 나는 그와 동의한다, Jon에게 감사한다. –

+1

Jondavidjohn의 대답에 추가하려면 비즈니스 로직을 뷰에 넣지 않는 한 아무 것도 사용할 수 있습니다. 당신이 언급 한 경우, 당신은 내가 '표시 로직'이라고 부르는 것을 사용하고 있습니다. 비즈니스 로직이 아닌 컨텐츠가 어떻게/어떻게 표시되는지를 결정하는 제어문 (데이터를 가져 오는 방법과 가져 오는 방법을 결정하는 논리). – Shivaas

1

이 변수를 너무 많이 사용하면 도우미를 사용할 수 있습니다. 그리고 당신은 그것에 대한 액세스를 좋아 할 수

<?php if (is_logged_in()) : ?> 
    <!--your html code --> 
<?php else ?> 
    <!--more html code --> 
<?php endif;?> 

는 도우미에서 그 예를 들어, 당신은, access_helper라고 :

<?php 
     function is_logged_in() { 
     return $this->session->user_data('is_logged_in'); 
     } 
?> 
-3

도우미에서 세션 변수에 액세스하는 것은 불가능합니다. 가장 간단한 방법은 뷰에서 세션 변수에 액세스하는 것입니다.

<?php if ($this->session->user_data('is_loggen_in'): ?> 
    <!-- HTML stuff --> 
<?php endif; ?> 

내 의견으로는, 나는 세션이 글로벌 정보이기 때문에 그 MVC 패턴의 철학에 영향을 생각하지 않습니다.

0

모범 사례는 확실하지 않지만 세션과 뷰를 처리하는 방식을 선호합니다. 사용자가 내 컨트롤러의 생성자에 로그인했는지 여부를 확인하기 위해 세션 데이터를 넣습니다.

그러면 자동으로 해당 컨트롤러에서로드 한 페이지가 자동으로 세션 캡처를 얻는 세션 유효성 검사가 수행됩니다.

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'); 
} 

여기서 개인용 기능을 사용하여 내 메시지를 볼 수 있습니다.

그런 다음 함수를 만들고 함수가 자동으로 "세션 커버"를 얻습니다.

희망이 도움이 될 것입니다.