PHP MVC - хранить пользовательские переменные в контроллере или модели? - PullRequest
4 голосов
/ 29 июля 2011

Каковы наилучшие методы хранения переменных в контроллере или модели? Например, когда скрипт выполняется. он берет идентификатор пользователя из сеанса и получает тип пользователя: Супер Администратор, Администратор, Представитель службы, Торговый представитель. Мы также проверяем, к какой учетной записи также принадлежит идентификатор пользователя, и собираем все настройки для этой учетной записи.

Мои вопросы: где мне хранить эти значения в контроллере или модели?

Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 29 июля 2011

В PHP немного странно думать об истинной модели MVC, потому что ваша модель, представление и контроллер могут получить доступ к $ _SESSION.

Если, например, вы собираетесь регистрироватьПользователь, ваша модель будет делать следующее:

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 голосов
/ 29 июля 2011

Вы сохраняете их в модели (захватываете их из БД), извлекаете их с помощью контроллера (при загрузке страницы) и отображаете результат их в представлении (вызывая класс контроллера при необходимости).

Это базовая теория 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
        }
    . . .
}

?>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...