2015-05-15 3 views
0

Правильно ли вызывать методы контроллера и получать доступ к его атрибутам через переменную $this, когда внутри представления?

Допустим, Im работает 'индекс' вид из контроллера 'Calcs':

Calcs контроллер:

class Calcs extends Controller{ 

    public function index(){ 

     $this->set('number', 1); 
     $this->set('number2', 4); 
     $this->set('number3', 5); 
     $this->set('number4', 2); 

    } 

    public function doComplexStuff($n1, $n2){ 
     return $n1 + $n2; 
    } 

} 

Просмотр "index.phtml":

// Html ... 
echo $this->doComplexStuff($number, $number2); //5 
echo $this->doComplexStuff($number3, $number4); //7 

Тогда у меня есть еще один контроллер, который также использует «doComplexStuff» от «Calcs»

class Another extends Controller{ 

    public function randomView(){ 

     $calcsController = ControllerFactory::getController('Calcs'); 
     $myRandomNumber = $calcsController->doComplexStuff(rand(), rand()); 
     $this->set('myRandomNumber', $myRandomNumber); 

    } 

} 

ответ

0

Контроллер - это слой, который обрабатывает запросы и делегирует данные для просмотра. Уровень представления должен просто отображать эти данные. Вот почему это называется видом. Поэтому все вычисления должны выполняться в контроллере. Контроллер затем отправляет данные для просмотра и просмотра, не выполняет никаких вычислений и не обрабатывает отображение данных.

+1

Фактически, вычисления обычно должны быть в модели. – plalx

+1

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

1

Наиболее распространенным подходом в существующих структурах MVC является передача любых результатов от контроллера к представлению. Один из способов сделать это - назначить их экземпляру представления как локальные или глобальные переменные.

Избегайте вызова методов контроллера или модели внутри своих представлений. Используйте представления для отображения данных, контроллеров для управления потоком вашего приложения и моделей для выполнения бизнес-логики. Это всего лишь общая рекомендация/принцип, реализованный в шаблоне MVC: http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller.

Для примера подхода, принятого в рамках Laravel, иди сюда: http://laravel.com/docs/4.2/responses#views

$view = View::make('greeting')->with('name', 'Steve'); 

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

Смежные вопросы