Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   [php] Велосипедные библиотеки (https://javascript.ru/forum/project/8639-%5Bphp%5D-velosipednye-biblioteki.html)

Koc 06.04.2010 16:52

[php] Велосипедные библиотеки
 
Пишу комплекс библиотек, что-то типа fw. Что уже есть:

Request (get, post, files, чтение cookies),
Response (установка cookies, headers),
Validator (форм),
Tralslate (локализация, с plural-формами, можно писать разные драйвера: gettext, DB),
Router (ЧПУ),
Settings (read only, phpArrays),
Paginator (только расчеты, отрисовка страниц делается через шаблоны),
Template (надстройка над Twig),
Database (надстройка над mysqli, свои типизированные плейсхолдеры).

В процессе Auth.

http://code.google.com/p/bicycle-libraries/

Koc 06.04.2010 16:59

Доступ к репозиторию (read-only, Mercurial)
Код:

hg clone https://bicycle-libraries.googlecode.com/hg/ bicycle-libraries
Примеры работы:
/* исходные данные */
$_POST['foo'] = 'bar';
$_GET['a'] = 1;
$_FILES['fileField1'] = array(
	'name'     => 'MyFile0.jpg',
	'type'     => 'image/jpeg',
	'tmp_name' => '/tmp/php/php6hst32',
	'error'    => 0,
	'size'     => 98174
);

$_FILES['fileField2'] = array(
	'name' => array(
		'MyFile1.txt',
		'MyFile1.jpg'
	),
	'type' => array(
		'text/plain',
		'image/jpeg'
	),
	'tmp_name' => array(
		'/tmp/php/php1h4j1o',
		'/tmp/php/php6hst32'
	),
	'error' => array(
		0,
		0
	),
	'size' => array(
		123,
		98174
	)
);


/* после подкл. core/bootstrap.php */
$_r = BL_Request::instance();
$_r->get->foo;  // NULL
$_r->post->foo; // 'bar'
$_r->foo;       // 'bar' (from request)
$_r->post->c = 'd';
$_r->post('c'); // 'd'

// ArrayAccess тоже работает
$_r['post']['c']; // 'd'

// не забываем про файлы
$request->files('fileField1'); // ассоциативный массив
$request->files('fileField2'); // список из ассоциативных массивов

Koc 06.04.2010 17:04

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

ps: сорри за 3 поста подряд, привык к склейке

Gvozd 06.04.2010 19:42

делать объектную обертку вокруг суперглобальных массивов, мягко говоря не самая лучшая идея
если все остальное также происходит, то библиотека достойна только смерти, медленной и мучительной
PS в форуме есть возможность редактирования постов, чтобы не оставлять дабл и трипл-постов

Koc 06.04.2010 21:36

я в курсе про редактирование, но склейка не лишняя =).

Цитата:

Последний раз редактировалось Koc, Сегодня в 16:01.
а чем собственно говоря обертка над $_(GET|POST|COOKIE|FILES) не нравится? У sf есть похожая, во 2 ветке - называется RequestHandler, и сегодня туда были добавлены акцессоры к COOKIE и FILES.

Вполне логично, когда в системе есть объекты Request и Response.

Kolyaj 06.04.2010 22:12

Цитата:

Сообщение от Koc
а чем собственно говоря обертка над $_(GET|POST|COOKIE|FILES) не нравится?

А зачем? В чём профит?

Gvozd 06.04.2010 22:37

Цитата:

Сообщение от Kolyaj
А зачем? В чём профит?

+1
Koc, кроме лишних тормозов, еще что-то по вашему это дает?

Koc 06.04.2010 22:59

1) более удобный доступ к файлам. К примеру выше
$request->files->fileField2 // тут структура будет не такая, как в $_FILES['fileField2']
/*
	array (
		'name' => 'MyFile1.txt',
		'type' => 'text/plain',
		'size' => 123,
		'tmp_name' => '/tmp/php/php1h4j1o',
		'error' => 0
	),
	array (
		'name' => 'MyFile1.jpg',
		'type' => 'image/jpeg',
		'size' => 98174,
		'tmp_name' => '/tmp/php/php6hst32',
		'error' => 0
	 )
*/


2) не будет нотайсов в случае если запрошенные ключи в массиве отсутствуют

3)можно подставлять значения по-умолчанию, если ключи не объявлены
$request->cookies('cookie', 'default value');


4) обернутый $_REQUEST ($_r->request) не будет "загажен" куками.

5) в случае установки кук через Response они сразу же будут доступны в Request'е

6) Аяксовый у нас запрос пришел? $_r->isAjax(); А может быть мы отправляли файлы через iframe? $_r->isIframed();

7) Запрос аяксовый (а значит данные в UTF-8), но наш проект в cp1251? Да нивапрос, Request сам все разрулит и конвертнет пришедшие данные в кодировку проекта

8) на сервере включены mq_gpc? Request задетектит это и пройдется по данным через stripslashes

Kolyaj 06.04.2010 23:04

Koc,
ок. Хотя местами перебор (7, например).

Gvozd 06.04.2010 23:23

честно говоря половина пунктов мне не по нраву, так как считаю, что программист должен разруливать их самостоятельно необходимым образом, а не надеятся на "умное" поведение вашей либы.
и расплачиватся за это заодно производительностью(от 10-и раз на каждом обращении, и выше)
не, это как-то не по мне
но думаю, найдется достаточно народа, кому это может подойти
удачи вам и творческих успехов


Часовой пояс GMT +3, время: 19:59.