Что такое бандл (bundle)

Как мы уже могли отметить в предыдущей главе, запуск Symfony-приложения означает загрузку ядра и обработку запроса или выполнение команд. В свою очередь, загрузка ядра означает загрузку всех бандлов и регистрацию их расширений сервисного контейнера (которые в любом бандле расположены в директории DependencyInjection). (далее…)

Подзапросы в Symfony

Вероятно, вы знаете о том, что при вызове метода HttpKernel::handle() вторым параметром идёт аргумент типа запроса - $type:

public function handle(
    Request $request,
    $type = HttpKernelInterface::MASTER_REQUEST,
    $catch = true
) {
    ...
}
(далее…)

Обработка исключений в Symfony 3.4

Не исключено, что в процессе долгого путешествия от запроса до ответа, возникнет та или иная ошибка. По умолчанию, ядро проинструктировано перехватывать любое исключение и даже после этого оно пытается подобрать подходящий для него ответ Response. Как мы уже видели, обработка каждого запроса обёрнута в блок try/catch: (далее…)

События Symfony, приводящие к ответу

Метод handleRaw() класса HttpKernel - это замечательный пример кода, анализируя который, становится ясно, что алгоритм обработки запроса сам по себе не является детерминированным (т.е. допускает отклонения и изменения в процессе). Это означает, что у вас есть несколько различных способов для внедрения в этот процесс, путём которого вы можете полностью заменить или частично модифицировать ответ на промежуточных шагах его формирования. (далее…)

Файловая система TxFS с поддержкой ACID-транзакций

Группа исследователей из Техасского университета в Остине разработала новую файловую систему TxFS, предоставляющую встроенную поддержку транзакций, удовлетворяющих требованиям ACID (атомарность, согласованность, изолированность, надежность). Код ФС доступен только в виде модифицированных исходных текстов ядра Linux 3.18, патчей для других версий пока нет. TxFS даёт возможность выполнить атомарное применение сразу группы операций над файлами. Например, в рамках изолированной транзации можно выполнить несколько операций записи в разные файлы, а затем атомарно применить все накопленные изменения, используя синтаксис begin/commit, похожий на транзакции в СУБД. Или можно откатить все внесённые в разные файлы изменения в случае, если в процессе обработки данных были выявлены какие-то проблемы. (далее…)

Создание встраиваемых сценариев на языке Lua

В то время как интерпретируемые языки программирования, такие как Perl, Python, PHP и Ruby, пользуются все большей популярностью для Web-приложений (и уже давно предпочитаются для автоматизации задач по системному администрированию), компилируемые языки программирования, такие как C и C++, по-прежнему необходимы. Производительность компилируемых языков программирования остается несравнимой (она уступает только производительности ручного ассемблирования), поэтому некоторое программное обеспечение (включая операционные системы и драйверы устройств) может быть реализована эффективно только при использовании компилируемого кода. (далее…)

Как в PhpStorm обновить phpdoc и docblock

Допустим вы изменили сигнатуру функции или метода и PhpStorm стал подсвечивать docblock волнистой линией, намекая на то, что он не соответствует актуальной сигнатуре. И как быть, неужели править phpdoc ручками? К счастью, нет! Достаточно навести курсор на docblock и нажать комбинацию клавиш Alt + Enter для вызова меню Intention Actions. Как правило, можно сразу же нажать Enter для выбора первого пункта из меню. (далее…)

Как пишутся системы оплаты для сайта

Требуется написать систему оплаты для интернет-магазина (без посредников для каждого способа оплаты, т.е без робокассы, интеркассы и подобных сервисов). Из вариантов оплаты планируется visa, mastercard, yandex.money и webmoney. В качестве backend используется django (но это не так важно). (далее…)

Как правильно читать файлы с помощью PHP

Одним из преимуществ работы с современными языками программирования, такими как PHP, является количество доступных возможностей. PHP легко мог бы присвоить девиз языка Perl, "Существует несколько способов сделать что-либо", особенно, когда речь идет об обработке файлов. Но при изобилии доступных средств, возникает вопрос, какое из них лучше для выполнения работы. Конечно, в действительности, ответ на этот вопрос зависит от того, какие цели вы ставите при обработке файла, поэтому изучение всех возможностей языка стоит потраченного времени. (далее…)

HttpKernelInterface в Symfony

Symfony знаменит благодаря своему HttpKernelInterface: namespace Symfony\Component\HttpKernel; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; interface HttpKernelInterface { const MASTER_REQUEST = 1; const SUB_REQUEST = 2; /** * @return Response */ public function handle( Request $request, $type = self::MASTER_REQUEST, $catch = true ); } Реализация этого интерфейса должна содержать один метод и с его Read more