[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Мой мини фреймворк
Страницы: 1, 2, 3
Michael
По коду, по сути сделано очень немного, собственно и проверять нечего. Но не так уж и плохо, для начала.

Запускал не из под корня сайта ===> не работает.

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

Я бы избавился от этих функций и перенес часть из них в объект "Приложение", а вспомогательную часть(типа работы с куками) - в компоненты.

Если это фреймворк, то его расширение, разработку модулей, тоже надо предусмотреть.





_____________
There never was a struggle in the soul of a good man that was not hard
Michael
Цитата (kaww @ 24.04.2013 - 13:58)
johniek_comp, Michael,
такой подход используется когда в методе класса определяется функция и при повторном вызове этого метода необходимо делать проверку на существование этой функции.

А ну в методе, еще поверю. У него то речь о глобальных функциях.

_____________
There never was a struggle in the soul of a good man that was not hard
ilyaplot
Цитата (sodroot @ 24.04.2013 - 15:48)
Цитата (ilyaplot @ 24.04.2013 - 11:27)
Шаблонизатор можно сделать еще проще. Достаточно передать переменные из массива, а не инклудить файл.

К тому же уязвимость...



$data = array('view'=>'Любой PHP файл')

foreach ($data as $key => $value)
  $$key = $value;

include(AppViewPath."/$view.php");

Можно подробнее, что за уязвимость?)

Так вроде пример привел. Как называется не помню.
Реализуется просто. Заливаем php шелл на сервер (нужна уязвимость в upload например), добиваемся доступа к набору переменных. отправляемых в шаблон.
А вообще после extract не должно использоваться ни одной системной переменной, тогда не будет долгих ночных дебагов на тему "ну почему же этот view не подгружается"

_____________
Заработай на Userator
ilyaplot
Я бы сделал ядро так:

class Core {
private static $_database;
public function __construct(){
self::$_database = new Database();
}

public static function database(){
return self::$_database;
}
}


Далее из любого места можно сделать так:

Core::database()->query(...);


Кстати, это Yii style :)

А еще интереснее, если Database будет возвращать сам себя, тогда сможем получить такую конструкцию:

$array = Core::database()->query("SELECT * FORM table")->fetchArray();


И даже такую (например для автоматического построения запросов)
$array = Core::database()->select("*")->from("table")->where("id > 1")->sort(array("name"=>"DESC"))->limit(0,30)->fetchArray();


_____________
Заработай на Userator
sodroot
Цитата (Michael @ 24.04.2013 - 12:02)
По коду, по сути сделано очень немного, собственно и проверять нечего. Но не так уж и плохо, для начала.

Запускал не из под корня сайта ===> не работает.

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

Я бы избавился от этих функций и перенес часть из них в объект "Приложение", а вспомогательную часть(типа работы с куками) - в компоненты.

Если это фреймворк, то его расширение, разработку модулей, тоже надо предусмотреть.

Ок. Приму во внимание все рекомендации, в скором времени переработаю выложу ещё архив.
sodroot
Хотел спросить про реализацию роутов) Не плохо реализовал? Это ни у кого не подглядывал, сделал как считаю удобным.
ilyaplot
По роутам тоже вопрос спорный. Лично я не считаю explode хорошей вещью для этого. Главное, что бы регулярка на удаление повторяющихся слешей работала.

Кстати, и view вот так удобно сделать
$content = ob_get_contents(); 
ob_end_clean();
return $content;


Тогда в самом шаблоне можно будет отобразить другой шаблон через $this

_____________
Заработай на Userator
sodroot
ilyaplot
Так вроде сделал нормально) одна функция получает голый роут с урла, а вторая отфильтррованый и если они не совпадают дает 404 и кидает на отфильтрованный.
Может саму его реализацию можно по коректнее сделать например на классах.
ilyaplot
Просто для структур
/controller/create/id/125 или create/id125.html
/[ru|en]/docs/faq/help.php?p=183
не всегда удобно использовать explode

_____________
Заработай на Userator
sodroot
Цитата (ilyaplot @ 24.04.2013 - 20:24)
Просто для структур
/controller/create/id/125 или create/id125.html
/[ru|en]/docs/faq/help.php?p=183
не всегда удобно использовать explode

Можно по подробнее, приведите пример кода, как можно по другому реализовать.
ilyaplot
В Yii это сделано с помощью регулярок в конфиге. Вот тут подробно.
Я тоже писал свой фреймворк, но все равно получался Yii, пусть и облегченный. Но Yii не такой тяжелый что бы его облегчать


_____________
Заработай на Userator
sodroot
Цитата (ilyaplot @ 25.04.2013 - 04:46)
В Yii это сделано с помощью регулярок в конфиге. Вот тут подробно.
Я тоже писал свой фреймворк, но все равно получался Yii, пусть и облегченный. Но Yii не такой тяжелый что бы его облегчать

Получается лучше использовать Yii?
Я пробовал работать с ним, я не все моменты в нём понял) Так в общем разобрался... В плане написания функционала, я не про ядро Yii, по тому и хотел написать что-то свое в чём буду разбираться от и до) С чужим кодом как-то сложновато) Возможно нужно просто немного больше свободного времени и всё само придёт постепенно)

Хочу добавить что у Yii если нет например такого контроллера выскакивает его ошибка или действия, мне нужно чтобы выдавало 404 и кидало на главную) Как это в Yii реализовать?)
+ Чтобы не было возможности ходить по левым урлам, а то в Yii Получается куча вариантов как можно попасть на одну и туже страницу...
Игорь_Vasinsky
Цитата
$array = Core::database()->select("*")->from("table")->where("id > 1")->sort(array("name"=>"DESC"))->limit(0,30)->fetchArray();


глаз ломает)

$array = Core::database()
->
select("*")
->
from("table")
->
where("id > 1")
->
sort(array("name"=>"DESC"))
->
limit(0,30)
->
fetchArray();


_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
ilyaplot
Цитата (sodroot @ 25.04.2013 - 12:33)
Цитата (ilyaplot @ 25.04.2013 - 04:46)
В Yii это сделано с помощью регулярок в конфиге. Вот тут подробно.
Я тоже писал свой фреймворк, но все равно получался Yii, пусть и облегченный. Но Yii не такой тяжелый что бы его облегчать

Получается лучше использовать Yii?
Я пробовал работать с ним, я не все моменты в нём понял) Так в общем разобрался... В плане написания функционала, я не про ядро Yii, по тому и хотел написать что-то свое в чём буду разбираться от и до) С чужим кодом как-то сложновато) Возможно нужно просто немного больше свободного времени и всё само придёт постепенно)

Хочу добавить что у Yii если нет например такого контроллера выскакивает его ошибка или действия, мне нужно чтобы выдавало 404 и кидало на главную) Как это в Yii реализовать?)
+ Чтобы не было возможности ходить по левым урлам, а то в Yii Получается куча вариантов как можно попасть на одну и туже страницу...

Пишете класс, который наследует CHttpException. В обработчике 404 ошибки добавляете редирект.
Вообще способов куча. Например, можно определить свой шаблон на 404 ошибку и делать редирект оттуда.

А что бы не было возможности попасть на одну и ту же страницу несколькими способами, нужно просто изучить urlManager и нормально настроить

_____________
Заработай на Userator
Быстрый ответ:

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