Должен ли я вызвать redirect () из моего контроллера или модели в рамках MVC? - PullRequest
3 голосов
/ 05 января 2011

Я использую MVC PHP Framework Codeigniter, и у меня прямой вопрос о том, откуда вызывать redirect () из: Controller или Model?

Сценарий:
Пользователь переходит на www.example.com / пункт / 555.В моей модели я выполняю поиск в базе данных предметов с идентификатором 555. Если я найду предмет, я верну результат своему контроллеру.Однако, если элемент не найден, я хочу перенаправить пользователя куда-нибудь.Должен ли этот вызов redirect () исходить из модели или контроллера?Почему?

Ответы [ 2 ]

6 голосов
/ 05 января 2011

Нет, ваша модель не должна возвращать false, и вы должны проверить свой контроллер следующим образом:

class SampleModel extends Model
{
    //Construct

    public function FetchItem($id)
    {
        $result = $this->db->select("*")->from("table")->where("item_id",$id)->get();
        if($result->num_rows() == 0)
        {
             return false;
        }
        //return result
    }
}

и в вашем контроллере выполните:

function item($id)
{
     $Item = $this->SampleModel->FetchItem($id);

     if(!$Item)
     {
          redirect("class/error/no_item");
     }
}

Модели предназначены только для данных либостандартный результат, такой как объект ключ / значение или логическое значение.

вся логика должна обрабатываться / контролироваться контроллером.

Модели не зависят от страницы и используются глобально во всем приложении, так что если другой класс / методиспользует модель, она может перенаправиться в неправильное местоположение, поскольку это другая часть вашего сайта.

1 голос
/ 05 января 2011

Кажется, что контроллер будет лучшим местом для вызова вашего перенаправления, потому что контроллер обычно делегирует вызовы модели, представлению или, в вашем случае, другому контроллеру.

Однако вы должны использовать все, что делаетсамый важный смысл для вашего приложения и того, что будет легче поддерживать в будущем, но также учтите, что правила существуют по определенной причине.

Короче говоря, если коллега попытается исправить ошибку в вашем приложениикод, что бы сказал стандарт «разумный человек»?Где большинство из них с большей вероятностью будет искать ваше перенаправление?

Кроме того, вы сказали, что уже возвращаете результат своему контроллеру ... возможно, именно здесь вы должны сделать свое перенаправление ...

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