Русскоязычный форум, посвященный фреймворку Kohana
http://forum.kohanaframework.su/

Контроллер или статический метод из библиотеки?
http://forum.kohanaframework.su/viewtopic.php?f=31&t=705
Страница 1 из 2

Автор:  arhont [ 25 июл 2013, 03:18 ]
Заголовок сообщения:  Контроллер или статический метод из библиотеки?

Нужен совет, что лучше использовать для того, что на "языке Джумлы" называется модулем. Или блоком просто... Делать отдельный контроллер или использовать, например статический метод? Просто контроллеры загружают роуты и в них сложно передавать параметры(опять нужно мучать роуты). Я больше склоняюсь переписать код и заменить их статическими методами. Есть ли тут подводные камни?

Автор:  WinterSilence [ 25 июл 2013, 15:23 ]
Заголовок сообщения:  Re: Контроллер или статический метод из библиотеки?

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

для упрощения составления запросов можно методы обертки сделать, аля:
Код:
/**
 * Wrapper for request to widget controller
 *
 * @param   string  $uri           Request uri(widget name)
 * @param   array   $data          Send data
 * @param   string  $method        Request method
 * @param   boolean $auto_render   Execute request and return body?
 * @return  mixed(string|Request)
 * @uses    Request::factory
 * @uses    HTML::chars
 * @throws  Request_Exception
 */
public static function widget($uri, array $data = NULL, $method = Request::GET, $auto_render = TRUE)
{
   // Create request
   if ( ! $widget = Request::factory('widget'.DIRECTORY_SEPARATOR.$uri))
   {
      throw new Request_Exception('Request to widget :uri failed', array(':uri' => $uri));
   }
   // Set data
   switch ($method)
   {
      case Request::GET:
         $widget->query($data);
         break;
      case Request::POST:
         $widget->post($data);
         break;
      default:
         throw new Request_Exception('Unknown method :method of widget :uri', array(':method' => $method, ':uri' => $uri));
   }
   // Set data sending method
   $widget->method($method);
   // Return result as string or Request object
   return ($auto_render ? $widget->execute()->body() : $widget);
}

Автор:  slider23 [ 26 июл 2013, 09:09 ]
Заголовок сообщения:  Re: Контроллер или статический метод из библиотеки?

Контроллеры юзать не стоит, это против принципов MVC (тонкий контроллер, толстая модель) - их сложно тестить, сложно переносить на другой фреймворк, если в последствии возникнет такая необходимость, вы справедливо написали.
Делайте отдельными классами.

Автор:  WinterSilence [ 26 июл 2013, 10:25 ]
Заголовок сообщения:  Re: Контроллер или статический метод из библиотеки?

slider23 если убрать контроллеры, то это будет в духе mvc?

Автор:  slider23 [ 26 июл 2013, 17:35 ]
Заголовок сообщения:  Re: Контроллер или статический метод из библиотеки?

Ну, у Laravel в туториалах такое практикуют - там код, который обычно находится в контроллерах, содержится в замыканиях роутов. :)

Контроллеры, конечно, нужны, но они, как завещали нам 37signals, в идеале должны принимать данные от веб-сервера, вызывать модели с логикой и передавать данные во вьюхи. Чем больше разного другого делает контроллер - тем больше вероятность проблем в будущем. А если планируется охватывать сайт тестами - вероятность перерастает в уверенность.

Ссылка по теме: http://habrahabr.ru/post/175465/

Автор:  WinterSilence [ 26 июл 2013, 18:07 ]
Заголовок сообщения:  Re: Контроллер или статический метод из библиотеки?

речь тут совсем о другом: в джумле модуль это не набор моделей как в кохане(речь о модулях из "коробки"), а скорее аналог триады в кохане. И тот и иной вариант имеют место на существование при разный в рамках проектов на базе коханы.
не совсем понял кто такие эти 37signals и какое они отношение имеют к мvс? не покажешь ли свои тесты для какого-либо сайта? очень интересно посмотреть это охватывание

Автор:  arhont [ 27 июл 2013, 01:10 ]
Заголовок сообщения:  Re: Контроллер или статический метод из библиотеки?

Решил так... Сделал абстрактный класс, добавил его в свой "Common" и вызываю классы(создаю объекты) через new и имя наследника этого абстрактного класса. Подгружаю сами классы в самом текущем контроллере(после класса контроллера).

По моему это оптимально и удобнее, чем использовать статику и возится с контроллерами. Такая вот альтернатива.
Но в одном случае, я всё же оставлю контроллер, т.к. там он работает и как Ajax и как встроенный сниппет по дефолту(категория изображений по умалчиванию).

Автор:  nkl [ 30 июл 2013, 16:39 ]
Заголовок сообщения:  Re: Контроллер или статический метод из библиотеки?

Я использую контроллеры только для приема переменных из request и $_POST и последующей подготовки переменных в ВИД. Саму же подготовку этих переменных осуществляю через Model_Uses (я его так обозвал). Допустим, из формы я получил значение $_POST['a'] = 1; и $_POST['b'] = 2, в ВИД мне нужно передать переменную, которая будет результатом сложения этих двух переменных, тогда мой код будет выглядеть так:
Код:
class Controller_Summ extends Controller_Template {

public function before(){
parent::before;
}

public function action_index(){
$summ = new Model_Uses();
if($summ->get_summ($_POST['a'], $_POST['b'])):

$data['summ'] = $summ->result;
$data['sum_ok'] = '';
else:
$data['summ'] = '';
$data['summ_error'] = '';
endif;

$this->template->summ = View::factory('summ', $data);
}
}

в Model_Uses
есть такой метод:
Код:
class Model_Uses {
   public function get_summ($a, $b){

      $this->result = $a + $b;
      
      return TRUE;
   }


Ну как-то так. Мб. я не прав?

upd: для особо придирчивых, замечу я намерено убрал все проверки БИНДЫ и прочие атрибуты "хорошего кода" для наглядности.

Автор:  slider23 [ 04 авг 2013, 20:59 ]
Заголовок сообщения:  Re: Контроллер или статический метод из библиотеки?

WinterSilence, 37signals - это авторы концепции толстых моделей и фреймворка Ruby on Rails, который стал стандартом, который так или иначе пытаются повторить в php-фреймворках.
По тестам - тут соображения простые. Проще тестировать методы класса, передавая в них данные в виде аргументов, чем методы контроллера, передавая в них данные через POST, GET и т.п. запросы при помощи общения с веб-сервером.

Автор:  Sergey [ 07 авг 2013, 01:18 ]
Заголовок сообщения:  Re: Контроллер или статический метод из библиотеки?

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

Страница 1 из 2 Часовой пояс: UTC + 4 часа [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/