2011-07-28 3 views
3

컨트롤러 또는 모델에 변수를 저장하는 최선의 방법은 무엇입니까? 예를 들어 스크립트가 실행될 때. 사용자 ID를 세션에서 가져 와서 Super Admin, Admin, Service Rep, Sales Rep와 같은 사용자 유형을 얻습니다. 또한 사용자 ID가 어떤 계정 인지도 확인하고 해당 계정의 모든 설정을 가져옵니다.PHP MVC - 컨트롤러 또는 모델에 사용자 변수를 저장 하시겠습니까?

내 질문에 컨트롤러 또는 모델에서이 값을 어디에 저장합니까?

미리 감사드립니다.

답변

3

PHP에서는 모델, 뷰 및 컨트롤러가 $ _SESSION에 액세스 할 수 있기 때문에 실제 MVC 모델을 생각하는 것이 약간 이상합니다.

class Model{ 
    ... 
    static function login($username, $password){ 
     $result = Model::getUser($username, $password); 

     if(empty($result)){ 
      return false; 
     } 
     else 
     { 
      $_SESSION['userid'] = $result['id']; 
      // Assign other information you think you'll need in the session here 
     } 
    } 

    static function loggedIn(){ 
     if(isset($_SESSION['userid']){ 
      return true; 
     } 
     else 
     { 
      return false; 
     } 
    } 

    static function getAttribute($attr){ 
     return $_SESSION[$attr]; 
    } 
    ... 
} 

class Controller{ 
    function someFxn(){ 
     $userInfo = Model::getAttribute('someAttr'); 
    } 
} 

은 분명히이 코드에 소비해야하지만, 제대로 개념을 표시해야합니다

, 예를 들어, 당신이 사용자를 기록하기 위하여려고하는 경우에, 당신의 모델은 다음을 수행합니다. 모델에서 정적 함수도 사용했지만 모델을 객체로 만들 수 있습니다. 전 모델에 이러한 설정을 저장하거나 컨트롤러에 다시 전달하고 컨트롤러가 이러한 설정을 저장합니다 않는 곳


내 질문은?

원하는 방식에 따라 데이터베이스에서 모델을 만들 때마다 설정을 가져 오거나 세션에 저장할 수 있습니다. $ _SESSION에 물건을 저장하면 데이터베이스 호출을 줄일 수 있습니다. 실제로 모델은 $ _SESSION 또는 데이터베이스를 조작합니다. 모델이 특정 항목 (사용자 모델을 만들 수있는 항목)이면 해당 개체를 인스턴스화하고 비공개 멤버에 정보를 저장합니다.

컨트롤러의 요점은 모델에서 정보를 가져 와서 그에 따라 페이지를 렌더링하는 것입니다. 정말 MVC의 흐름이 방법은 작동합니다

  1. 요청이 컨트롤러로 구성되어
  2. 컨트롤러 정보 양식 모델
  3. 모델 반환 (이 선택 사항입니다, 아마 컨트롤러가 모델에서 아무것도 필요하지 않습니다) 도착 컨트롤러에 대한 정보
    (이전 단계에서 요청한 경우 발생)
  4. 컨트롤러는 적절한 정보를 보냅니다.
+0

사용자 ID는 사용자 ID와 같은 세션 데이터를 가져 오면 DB로 이동하여 ID를 기반으로 일부 사용자 설정을 가져옵니다. 내 질문은 모델에 이러한 설정을 저장하거나 컨트롤러에 다시 전달하는 것이며 컨트롤러는 이러한 설정을 저장합니다. –

0

모델에 저장 (DB에서 가져 오기)하고 컨트롤러 (페이지로드시)에서 가져오고 결과를보기 (필요할 때 컨트롤러 클래스를 호출하여 표시) .

이 MVC의 기본 이론이다

...

행운을 빕니다!

나는 당신에게 판매 할 수있는 자동차 객체의 간단한 예를 줄 것이다 ...이 예제는 짜증,하지만 당신은 ... MVC가 어떻게 작동하는지 그것에서

<? 
// Data 
class Car 
{ 
    private $_color; 

    public function setColor($newC) 
    { 
     $this->_color = $newC; 
    } 
    public function getColor() 
    { 
     return $this->_color; 
    } 

    private $_maxSpeed 

    public function setMaxSpeed($newMS) 
    { 
     $this->_maxSpeed = $newMS; 
    } 
    public function getMaxSpeed() 
    { 
     return $this->maxSpeed; 
    } 
} 

// Example 
$car = new Car(); 
$car->setColor($dbInfo['color']); 
$car->setMaxSpeed($dbInfo['maxSpeed']); 

// Controller 

class Sales 
{ 
    . . . 
    public function SaleCar(Costumer $costumer, Car $car, $quantity) 
    { 
     if($car->getColor() == "red") // Red is expensive color... 
      $car->MultiplyPriceBy(1.5); // Just an example... 
     else 
      $car->SubsetQuantityBy($quantity); // The car has quantity propery as well... and so on... 

     $costumer->setPaymentType("Credit-card"); 
     . . . 
     $costumer->Pay($quantity * $car->getPrice()); 

     return $finalPrice; // $quantity * $car->getPrice() 
    } 
    . . . 
} 

// View 
class SalesPanel 
{ 
    . . . 
     public function output() 
     { 
      foreach($this->cars as $car) 
      { 
       if(in_array($car->getID(), $_POST['car_id'])) 
        Sales->SaleCar(Costumer::GetCostumerFromID($_SESSION['uid']), $car, $_POST['quanityty']); 
      } 

      $output = . . . 
      $output .= "Car model GHi675 old by . . . "; // Get info from controller 
     } 
    . . . 
} 

을 이해할 수있다?>

관련 문제