All streams
Search
Write a publication
Pull to refresh
386
0
Дмитрий Котеров @DmitryKoterov

Пользователь

Send message
Исключительно из соображений краткости примера и экономии в нем строчек, дабы статья не разрасталась так сильно (в реальной жизни, конечно, лучше все через curl делать). Через file_get_contents() в одну PHP-строчку выполняются GET-запросы. А вот POST-запросы коротко не выполнить, приходится делать через curl.
Можно примеры таких сайтов?
Вот еще есть пример довольно лаконичного использования OAuth-модуля, поставляемого в виде binary extension для PHP:

docs.php.net/manual/ru/oauth.examples.fireeagle.php

Там этот же конечный автомат развернут в 2 if-а. Правда, про E_NOTICE они в нем забыли. :-)
эээ… автор и dk — одно и то же лицо. :-)
Ну, в hueniverse.com/oauth/ как раз разбито на 4 части. Рекомендую, кстати, эту статью тоже прочитать тем, кто собирается более детально работать с OAuth. Правда, она на английском и несколько другой «заточенности», чем моя.
Интересно, выдержит ли ПРОМТ нагрузку с серпа. Судя по тому, что для включения переводя нужно явно выполнять действия по его включению (простите за каламбур), что срезает 99.9% запросов, вопрос нагрузки может быть не очевиден.
Проверка, изменился ли файл, тут ни причем. В этом легко убедиться, отключив данную проверку (это отключение дает не просто маленький, а даже неизмеримо маленький прирост). Дело именно в количестве мелких файлов.
А почему знакомство с OpenID повлияло на статью про OAuth? :-)
Вообще, странно оно как-то… Джанге уже несколько лет от роду, а встроенного мигратора (хоть какого-то, хоть ручного) — нет, команды запуска консольной программы (типа python manage.py my_cron_script) — тоже нет… Неужели невостребовано? Надеюсь, в новых версиях появится.
Вы очень хороший пример привели, с magic_quotes, но, кажется, не в том смысле, который в него вкладывали. Это как раз пример о том, что не надо делать экранирование в модели, потому что модель не знает, где будут выводиться данные и в каком формате. Ну а к автоквотингу в шаблоне пример с magic_quotes имеет малое отношения.
Насчет визуализации списка вещей, которые хочется делать — очень сильно поддерживаю автора. А вот насчет выбора из этих вещей — мне кажется, что в большинстве случаев достаточно просто глянуть на список, чтобы сразу понять, чем из этого заниматься прямо сейчас НЕ хочется, а потом уже выбирать из нескольких оставшихся вариантов.

Расскажу о методе, который я иногда применяю. Если, к примеру, нужно выбрать из двух равноценных вариантов, я бросаю монетку. И если после этого чувствую: «блин, жаль, что решка выпала» — считаю, что выпал на самом деле орел. Т.е. бросаю монетку, но, взглянув на результат броска, делаю все равно так, как хочется.

Работает железно. Монетка позволяет вынести на сознательный уровень эмоций те подсознательные причины, которые до броска были неочевидны. Случай тут ни при чем, все дело в самообмане.
Правильно товарищ говорит. View должен сам квотить данные, которые в него приходят, автоматически. Иначе получается опасность XSS.
Вот именно поэтому я и предпочитаю сокращать <xsl:value-of select=«val» /> до {val} у себя.
> Конструкция не содержит эскейпинга html entities — а значит, никуда не годится
Кажется, имеет место недопонимание. В XSLT по умолчанию как раз включен квотинг — просто по определению (в том и сила). А чтобы его выключить при каком-то единичном выводе, нужно писать длинное <xsl:value-of select=«val» disable-output-escaping=«yes» />. Конструкция же {val} вне тэгов в ShortXSLT просто заменяется на <xsl:value-of select=«val» />, который как раз КВОТИТ данные.
Эх… дался Вам этот промежуточный XML. :-) И потом, почему ИМЕННО ЭТОТ промежуточный слой вызывает столько вопросов? Чтобы его закодировать, нужно всего-то 30 строк кода. А ведь есть еще другие, более грандиозные, слои: это сам интерпретатор PHP, парсер PHP во внутреннее представление, написанный на Yacc + Bison (или Lex, не помню точно), который компилируется программу на Си, которая обрабатывается препроцессором cc, который подается на вход gcc, из которого gcc делает внутреннее платформенно-независимое представление, которое превращается в объектный файл, который отдается на вход линковщику, который запускается в отдельном адресном пространстве, выделенном ОС, которая написана на Си, который написан на более старом Си, который написан на еще более старом Си, который ..., который написан на ассемблере, который написан на более старом ассемблере, который ..., который написан в машинных кодах. (Уверен, что я еще потерял по дороге добрую сотню промежуточных слоев, ну да ладно.)
Ну так выключите персонально для этого шаблона short_open_tag через ini_set… Верно ведь, что на типичном сайте XML-шаблонов значительно меньше, чем HTML-шаблонов?
Хочу заметить, что длинно или коротко — не всегда важно, все зависит от качества подсветки и автодополнения кода в редакторе. (Хотя, конечно, идеального редактора для XSLT-шаблонов я пока не видел; ближайший кандидат для меня — XML Spy для Eclipse, но он платный.)

Кстати, for не эквивалентен xsl:template. Лучше уж сравнивать for и xsl:for-each. Лично моя практика показывает, что xsl:template в основном используется для определения именованных блоков, подверженных наследованию, т.е. для того же, что есть в Джанге. А с использованием ShortXSLT for-each и вовсе записывается вот так:

{for-each /nodes/*}
Name: {./name}
{/for-each}
Автор Симфони открыл для себя Джангу, эврика! :-) Почему бы тогда просто не писать на Джанге? ИМХО она лучше, чем конкретно Симфони — по крайней мере, в Джанге некривая ОО-модель, а также весьма элегантный ORM (хотя в Симфони Doctrine внедрять, я с ним не работал, а вот с Propel — пришлось и много). Если бы у меня был выбор только между Симфони и Джангой, а бы выбрал последнюю — даже учитывая всю мою любовь к PHP…
По поводу XSLT, XML и сокращенных тэгов.

1. Не нужно, конечно же, генерировать XML в контроллерах, откуда эта фантазия? В контроллерах можно генерировать нативный PHP-массив, который несложной рекурсивной функцией автоматически преобразуется в XML, а тот уже подается на вход XSLT. В итоге, хоть XML и есть, но нигде в коде он явно не генерируется. А отлаживать шаблоны и предоставлять внешние API удобно.

2. С многословностью XSLT лично я борюсь вот так: dklab.ru/lib/Dklab_ShortXSLT/ — это надстройка-компилятор над XSLT, которая компилирует шаблоны в XSLT. Важно, что компиляция происходит «на лету» и с кэшированием получившихся xslt-файлов, поэтому это не дает накладных расходов (своеобразный «JIT в XSLT»). Также никто не запрещает из XSLT вызывать специальные PHP-хелперы (например, для обращения к роутеру).

3. Искренне не понимаю людей, которые пишут <?php echo $a?> вместо <?=$a?>. На хостинге отключены короткие тэги? Ну так включите их в .htaccess или же воспользуйтесь функцией ini_set(«short_open_tag», true) во фронт-контроллере. Не можете написать <?xml ...?>? Ну так напишите <?='<?xml version="..."?>'?>, неужели так много мест, где это потребуется написать? Применяете PHP-вставки в XML-документах? А я предпочитаю XML-документы генерировать программно, а также с помощью XSLT.

Да, еще одно. В Смарти давным-давно имеется режим автоквотинга, только он по умолчанию выключен. (Я сам Смарти не очень люблю.)
Куки обрабатывает не моя библиотека, а SoapClient и SoapServer.

Information

Rating
Does not participate
Location
Россия
Registered
Activity