[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: MVC и методы контроллера
Страницы: 1, 2, 3, 4
dr.nomore
Цитата (twin @ 5.12.2013 - 12:31)
Почему это вдруг затычка? Это как раз по делу и есть. Куда делее то...
Если ТС применяет такую архитектуру

Да я вообще не понял уловки. Снаружи легко все определяется насколько я понимаю http://be1.php.net/is_callable , изнутри через зеркало, или еще каким геморроем.

Кроме того если ТС понапишет везде __call() все что не кал - станет кал после проверки is_callable()



kaww
Цитата (dr.nomore @ 5.12.2013 - 09:27)
По сущностям. catalog это что? В вашем каталоге могут быть товары, статьи, заметки, новости, блоги, альбомы и телепрограммы? То есть catalog/product/phone это значит покажи мне из каталога продукты телефоны. А если catalog/article/ukraina_buzit то покажи мне из каталога статью про Украину которая бузит?

Данный путь указан в качестве примера. так же я явно указал на то, что он разбирается по тому принципу, который вы сочли идеологически ( или еще как-то) неверным . Т.е. /:controllerName:/actionName[:/id] - на первом месте имя контроллера, на втором экшен. То, что он "покажет" определено логикой контроллера, но если уж придираться к словам - он вам ничего не покажет. для этого существует представление.
dr.nomore
Извратили идею скрипта. В смысле скриптового языка. Вчера смотрел рекламные расценки на местном досужем сайте, заглянул в вакансии. Программисту php дохрена чего там надо знать, целый список библий процитирован которые надо прочесть и про полиморфизм. Одуреть. В языке где главная фишка - пофигизм - какой-то полиморфизм отыскали.

У читателя с каталогом на все-провсе видели как оно морфируется? (string) иниипет. В более продвинутом пофигизме оно внутри. if(!is_string() // и далее по тексту выше.

Ну на кой черт все эти чудовищные цепи? Вы же не можете загрузить все барахло как это делает скажем ФШ или Ворд. Вы должны загрузить только то, что должны загрузить, чтобы прожевать и выплюнуть страницу. Отталкиваясь от этой идеи посмотрите на свой контроллер. Он же весь загрузится. Со всеми экшнонами.

Вот поэтому он и жЫрный. И тупой.
dr.nomore
Цитата
Т.е. /:controllerName:/actionName[:/id] - на первом месте имя контроллера, на втором экшен.


Звездешь. Ваши "действия" это модели. Контроллеру никакие дела в бд кроме может быть настроек не нужны. Если вы качаете в контроллер запись продукта, то ее девать вам ее некуда, кроме как из контроллера прямо в вид воткнуть. Таким образом и получается троица вся-в-одном. Раньше так делали инклюдами, а теперь типа классами. Не смогли осилить императива.
dr.nomore
В статике должен быть такой файл: /shop/phone/nokia-777.html

В динамике мы заменяем конкретику на абстракцию /file/file/file/...

Которая может получить например такой смысл /shop/department/product

Который конкретизируется действиями юзера до /shop/phone/nokia-777

shop может быть показан как список отделов, отдел как список товаров, товар как таковой + сопутствующие.

Этим по-вашему контроллер будет заниматься?

Напишем модель shop. Написали, загрузили из первого /file/. shop по плану всегда хочет показать товар лицом. Такова его бизнес-логика. В отсутствии необходимых данных shop обходится тем что есть. Если вообще никаких данных то показать все dep; если есть dep - о котором во втором /file/ - показать все товары (по страницам) из dep. Если и товар выбран - из третьего /file/ - ну наконец-то - показать товар. И сопутствующие.

Все остальные свистелки и перделки приделываются в шаблонах.

Покажите на косяки.
mvg
На 404 страницу не хорошо. Потом может появиться много мыслей о битых ссылках и этому подобных.

Если уже и хочется "завернуть" ошибку интерпритатора в собственное представление тогда может быть стоит подумать про страницу 500...

По существу: для пользовательской обработки ошибок существуют функции обработки ошибок: http://www.php.net/manual/ru/ref.errorfunc.php

Однако стоит заметить что фатальные ошибки времени выполнения это неустранимые средствами самого скрипта ошибки, такие как ошибка распределения памяти и т.п. При появлении фатальной ошибки выполнение скрипта в таком случае прекращается. (http://www.php.net/manual/ru/errorfunc.constants.php)

В случае попытки получить доступ к приватным методам интерпритатор генерирует фатальную ошибку: Fatal error: Call to private method A::foo() from context

<?php
class
A
{
private function foo()
{
echo "Hello world";
}
}


$A = new A();
$A->foo();
?>

Fatal error: Call to private method A::foo() from context '' in D:\www\index.php on line 11


Варианты с try...catch также как и с is_callable не подходят для решения этой задачи.

Однако на просторах www есть предложение отлавливать Fatal error с помощью импровизированного блока try ... catch используя функции ob_start ob_clean_flush примерно так:


ini_set("display_errors", "on");
error_reporting(E_ALL);

function fatal_error_handler($buffer)
{
if (preg_match("|(Fatal error</b>:)(.+)(<br)|", $buffer, $regs) )
{
unset($A);
// header("Location: 500.php");
return "Ошибка инкапсуляции";
}

return $buffer;
}


class A
{
private function foo()
{
echo "Hello world";
}
}


ob_start("fatal_error_handler");

$A = new A();
$A->foo();

echo "Program still executing....";

ob_end_flush();


хотя думаю что это не совсем корректно, но для крайних случаев пойдет.
Быстрый ответ:

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