[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: MVC и методы контроллера
Страницы: 1, 2, 3, 4
dr.nomore
Цитата
Другой вопрос, что акшенов там должно быть столько, сколько необходимо для этой страницы, не более. А они уже решают, какую модель юзать. Здесь ведь можно нарваться и на другую крайность, тем же Брэди задекларировнную - "лучший контроллер - пустой контроллер".

Если мне для нормальной работы стрницы требуется чтение-добавление-редктирование, то и должно быть три акшена. read-add-edit. Прятать это в недрах паттернов нерационально и не прозрачно.


Вы хотите сказать edit это модель которую подключает контроллер через выбранное действие. Однако из вашего контроллера ничего не подключалось насколько я помню. Прямо в экшн засасывались все данные и куда-то там отдавались. На вид, наверно, ставили их.

Если вы все-таки хотите сказать что Edit это модель которую контроллер загружает, то у меня все переворачивается.

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


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

В общем привычка не отпустила разрабов. Как в доклассовую эпоху они собирали инклюдами скрипт из кусков по сегментам в урле - так и собирают, но теперь через экшоны.
dr.nomore
Ну хорошо, три экшона на insert, update, delete.

class cDML {

public function __construct($some_arg_like_link) {
// some common code
}

protected function execute($some_options) {
// go to db
}

}


class cDML_INSERT extends cDML {

public function __construct($some) {
parent::__construct($some);
}

public function execute($some_options) {

}

}




if($action = $this->_config->get->edit) {

$class_name = 'cDML_' . $action;

$class = new $class_name();

$class->execute();

}


Что не так?
dr.nomore
Да, если это не полиморфизм, убейте меня абстену.

А когда все экшоны в хардкоде, это убейте себя апстену.
dr.nomore
Кстати, is_callble() тычет автолодер. Так что все спок проверится.
twin
Ну в общем то да, соглсен. В этом что-то есть. smile.gif

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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Invis1ble
Про рефлексию в роутере уже сказали?

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

rooor
блин, я запутался...
так как лучше или правильней будет?
подключаем класс, проверяем доступные методы через get_class_methods
или Reflection будет лучше заюзать? не работал с ним, по диагонали просмотрел
rooor
номер раз:
$class = new ReflectionClass($contrName);
$methods = $class->getMethods(ReflectionMethod::IS_PUBLIC);
var_dump($methods);

номер два:
$class = new $contrName();
var_dump(get_class_methods($class));

есть разница?
twin
И еще какая.

Можно при определенных условиях удалить гланды через жо задний проход.

Причем тут рефлексия то? Мало ли кто чего в пылу запарки написал.


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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Invis1ble
Реально спросоня не совсем въехал в тему ))
Самый оптимальный вариант - юзать префиксы для методов экшенов и проверять с помощью method_exists().

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

twin
Invis1ble
Проснись и дальше)))
is_callble() прикольная штука на самом деле, method_exists() - жалкое подобие левой руки smile.gif

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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Invis1ble
is_callable() будет выполнять лишнюю работу, кроме того
class A {
public function __call($a, $b) {}
}


$a = new A;
var_dump(is_callable([$a, 'action_shit'])); // true


_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

twin
Из контекста зря это выдернуто.

Вернись немного...

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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Invis1ble
twin
Я так понял, что ты предлагаешь юзать is_callable() вместо method_exists(). Я неправ? Куда вернуться?

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

twin
Invis1ble
Ты не первый год на форуме. И уж кто, а ты должен точно знать, что ничего я не предлагаю и предложить не могу. Я могу только высказать предпочтения.

В данном случае - да, парень меня убедил, что не все то золото, что блестит.

Особенно этой фразой:
Цитата
Не смогли осилить императива.


Дело в том, что method_exists() имеет гораздо меньший ареал приминения, чем is_callable(), посмотри мануал. Я уже естественно молчу про __call и иже.

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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.