[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: MVC и методы контроллера
Страницы: 1, 2, 3, 4
rooor
Приветствую

Как известно, в MVC контроллеры и методы вызываются из адресной строки...
Можно как-то выдать пользователю 404 страницу или перебросить на главную, если вызывается приватный метод?
Bizon4ik
При вызовет приватного метода не из класса должна вылететь ошибка. Ее можно поймать через исключение и сделать переадресацию на 404 страницу.

Или вы хотите выводить 404 страницу при вызове приватного метода из самого класса?
dr.nomore
MVC тут не при чем. Как известно MVC это категорический императив не более того. Из которого и вытекает все остальное. Нет, я имел ввиду об этом как раз и не знают, про категорический императив, и воображают будто бы методы и что там еще вызываются в MVC из адресной строки и типа, это признак MVC паттерна.

Чтобы пользователь не вызывал лишнего делают whitelist.


dr.nomore
Bizon4ik

Скорее всего, поскольку у ТС контроллеры и методы - то есть экшны. Внутри контроллера. Все плоско: первый сегмент - контроллер, второй сегмент - экшон. В результате контроллер становится жирным и тупым.

Да, изнутри класса тоже можно узнать какой метод приватный. Надо выкинуть за инстансь еще инстансь и она осмотрев снаружи вернет искомое.
rooor
Цитата
Ее можно поймать через исключение и сделать переадресацию на 404 страницу

да, но если вывод ошибок отключен, будет пустая страница

Цитата
Все плоско: первый сегмент - контроллер, второй сегмент - экшон. В результате контроллер становится жирным и тупым.

получается, что kohana, codeigniter, etc... юзают жирные и тупые контроллеры...
Aeq
белые списки.
все что без фильтрации по белому списку должно быть доступно только админу, а админ подразумевается что херню в адрес не напишет.
rooor
да вот тоже думаю... наверное самый оптимальный вариант
twin
Цитата (rooor @ 5.12.2013 - 05:46)
получается, что kohana, codeigniter, etc... юзают жирные и тупые контроллеры...

Yii еще biggrin.gif

Вообще аббриветура ТТУК пошла из высказывания одного из разрабов ZEND-фреймворка и применительна по большому счету только к нему. Но у нас как всегда - заставь дурака Богу молиться, он лоб расшибет (ничего личного, просто пословица).

По теме. Можно перехватить вызовы несуществующих методов магическим __call() или __callStatic() в зависимости от реализции. И в нем уже отрендерить 404.

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

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

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

user posted image
kaww
Цитата (dr.nomore @ 4.12.2013 - 23:18)
Все плоско: первый сегмент - контроллер, второй сегмент - экшон. В результате контроллер становится жирным и тупым.

Непонятно как вы пришли к такому выводу. Как могут правила маршрутизации влиять на соблюдение паттерна. Вот пример:
имеем адрес /catalog/product/phone, согласно правилам маршрутизации вызывается CatalogController::productAction, который имеет следующую реализацию:
function productAction()
{
$product = $this->serviceLocator()->entityManager()->entity('Product')
->
find((string)$this->params()->fromQuery('id'));
if (!$product) {

$this->getResponse()->setStatusCode(404);
return false;
}
return array('product' => $product);
}

dr.nomore, почему это ТТУК?
rooor
Цитата
Можно перехватить вызовы несуществующих методов магическим __call() или __callStatic()

опа) то что надо) + smile.gif
forza
Цитата
получается, что kohana, codeigniter, etc... юзают жирные и тупые контроллеры...

Yii еще  biggrin.gif
Цитата
Все плоско: первый сегмент - контроллер, второй сегмент - экшон.


Вообще не обязательно. Уверен на 100% что в каждом популярном фреймворке можно задавать правила маршитизации в конфигурационном файле (либо в другом месте, где решит девелопер). Там и 3ий сегмент может быть контроллером, а первый экшеном и вообще как захочет программист/заказчик.

http://www.yiiframework.com/doc/guide/1.1/en/topics.url



_____________
Заработок для веб-разработчиков: CodeCanyon
Мое Портфолио
dr.nomore
Цитата
Непонятно как вы пришли к такому выводу. Как могут правила маршрутизации влиять на соблюдение паттерна.


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

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

/shop/ может вызывать magazin(), article - stati и так далее. Тот же вайтлист в хардкоде.
dr.nomore
Цитата (rooor @ 5.12.2013 - 10:58)
Цитата
Можно перехватить вызовы несуществующих методов магическим __call() или __callStatic()

опа) то что надо) + smile.gif

Они уже могут быть заняты. Или займете и внезапно потребуется применить по делу, а не в качестве зытычки.
twin
Цитата (dr.nomore @ 5.12.2013 - 08:27)
Они уже могут быть заняты. Или займете и внезапно потребуется применить по делу, а не в качестве зытычки.

Почему это вдруг затычка? Это как раз по делу и есть. Куда делее то...
Если ТС применяет такую архитектуру, тут сам дохтор прописал использовать перегрузку.
Вот все остльное как раз и будет затычками.

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

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

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

user posted image
dr.nomore
Цитата
имеем адрес /catalog/product/phone, согласно правилам маршрутизации вызывается CatalogController::productAction, который имеет следующую реализацию:


Не знаком с обстоятельствами при которых тот, неизвестный мне чувак обозвал такие контроллеры жирными и тупыми, но я с ним полностью согласен. Жирными могут быть виды, поскольку это шаблоны; и модели, поскольку это т.н. бизнес-логика, но контроллер не может. Его вообще может не быть, поскольку на вебе есть суперглобальный контроллер под названием $_SERVER, $_GET, $_POST & $_SESSION. В перспективе он будет только расширятся.

По сущностям. catalog это что? В вашем каталоге могут быть товары, статьи, заметки, новости, блоги, альбомы и телепрограммы? То есть catalog/product/phone это значит покажи мне из каталога продукты телефоны. А если catalog/article/ukraina_buzit то покажи мне из каталога статью про Украину которая бузит?
Быстрый ответ:

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