Приветствую
Как известно, в MVC контроллеры и методы вызываются из адресной строки...
Можно как-то выдать пользователю 404 страницу или перебросить на главную, если вызывается приватный метод?
Bizon4ik
5.12.2013 - 02:30
При вызовет приватного метода не из класса должна вылететь ошибка. Ее можно поймать через исключение и сделать переадресацию на 404 страницу.
Или вы хотите выводить 404 страницу при вызове приватного метода из самого класса?
dr.nomore
5.12.2013 - 03:16
MVC тут не при чем. Как известно MVC это категорический императив не более того. Из которого и вытекает все остальное. Нет, я имел ввиду об этом как раз и не знают, про категорический императив, и воображают будто бы методы и что там еще вызываются в MVC из адресной строки и типа, это признак MVC паттерна.
Чтобы пользователь не вызывал лишнего делают whitelist.
dr.nomore
5.12.2013 - 03:18
Bizon4ik
Скорее всего, поскольку у ТС контроллеры и методы - то есть экшны. Внутри контроллера. Все плоско: первый сегмент - контроллер, второй сегмент - экшон. В результате контроллер становится жирным и тупым.
Да, изнутри класса тоже можно узнать какой метод приватный. Надо выкинуть за инстансь еще инстансь и она осмотрев снаружи вернет искомое.
Цитата |
Ее можно поймать через исключение и сделать переадресацию на 404 страницу |
да, но если вывод ошибок отключен, будет пустая страница
Цитата |
Все плоско: первый сегмент - контроллер, второй сегмент - экшон. В результате контроллер становится жирным и тупым. |
получается, что kohana, codeigniter, etc... юзают жирные и тупые контроллеры...
белые списки.
все что без фильтрации по белому списку должно быть доступно только админу, а админ подразумевается что херню в адрес не напишет.
да вот тоже думаю... наверное самый оптимальный вариант
Цитата (rooor @ 5.12.2013 - 05:46) |
получается, что kohana, codeigniter, etc... юзают жирные и тупые контроллеры... |
Yii еще
Вообще аббриветура ТТУК пошла из высказывания одного из разрабов ZEND-фреймворка и применительна по большому счету только к нему. Но у нас как всегда - заставь дурака Богу молиться, он лоб расшибет (ничего личного, просто пословица).
По теме. Можно перехватить вызовы несуществующих методов магическим __call() или __callStatic() в зависимости от реализции. И в нем уже отрендерить 404.
_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.
Цитата (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, почему это ТТУК?
Цитата |
Можно перехватить вызовы несуществующих методов магическим __call() или __callStatic() |
опа) то что надо) +
Цитата |
получается, что kohana, codeigniter, etc... юзают жирные и тупые контроллеры...
Yii еще biggrin.gif |
Цитата |
Все плоско: первый сегмент - контроллер, второй сегмент - экшон. |
Вообще не обязательно. Уверен на 100% что в каждом популярном фреймворке можно задавать правила маршитизации в конфигурационном файле (либо в другом месте, где решит девелопер). Там и 3ий сегмент может быть контроллером, а первый экшеном и вообще как захочет программист/заказчик.
http://www.yiiframework.com/doc/guide/1.1/en/topics.url
_____________
Заработок для веб-разработчиков: CodeCanyon Мое
Портфолио
dr.nomore
5.12.2013 - 12:24
Цитата |
Непонятно как вы пришли к такому выводу. Как могут правила маршрутизации влиять на соблюдение паттерна. |
На несоблюдение подразумевалось. Когда контроллер делает все от начала до конца и его называют регулировщик, а тут же рядом еще один - который называют роутер. В итоге никто не знает куда делся паттерн, но пищат от радости: как теперь все стало классово.
Сегментов может быть стопицот, может быть 0. Аргументов может быть стопицот, может быть 0. Куда чего хотите, туда того и профтыкайте. При этом прямой связи между словами в сегментах и аргументах и вызовами может не быть.
/shop/ может вызывать magazin(), article - stati и так далее. Тот же вайтлист в хардкоде.
dr.nomore
5.12.2013 - 12:27
Цитата (rooor @ 5.12.2013 - 10:58) |
Цитата | Можно перехватить вызовы несуществующих методов магическим __call() или __callStatic() |
опа) то что надо) + |
Они уже могут быть заняты. Или займете и внезапно потребуется применить по делу, а не в качестве зытычки.
Цитата (dr.nomore @ 5.12.2013 - 08:27) |
Они уже могут быть заняты. Или займете и внезапно потребуется применить по делу, а не в качестве зытычки. |
Почему это вдруг затычка? Это как раз по делу и есть. Куда делее то...
Если ТС применяет такую архитектуру, тут сам дохтор прописал использовать перегрузку.
Вот все остльное как раз и будет затычками.
_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.
dr.nomore
5.12.2013 - 13:27
Цитата |
имеем адрес /catalog/product/phone, согласно правилам маршрутизации вызывается CatalogController::productAction, который имеет следующую реализацию: |
Не знаком с обстоятельствами при которых тот, неизвестный мне чувак обозвал такие контроллеры жирными и тупыми, но я с ним полностью согласен. Жирными могут быть виды, поскольку это шаблоны; и модели, поскольку это т.н. бизнес-логика, но контроллер не может. Его вообще может не быть, поскольку на вебе есть суперглобальный контроллер под названием $_SERVER, $_GET, $_POST & $_SESSION. В перспективе он будет только расширятся.
По сущностям. catalog это что? В вашем каталоге могут быть товары, статьи, заметки, новости, блоги, альбомы и телепрограммы? То есть catalog/product/phone это значит покажи мне из каталога продукты телефоны. А если catalog/article/ukraina_buzit то покажи мне из каталога статью про Украину которая бузит?
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.