Для пользователей Symfony2:
Если вы не хотите что-то менять в своем javascript, чтобы это сработало, вы можете сделать эти изменения в своем приложении symfony:
Создать класс который расширяет класс Symfony \ Component \ HttpFoundation\request:
<?php
namespace Acme\Test\MyRequest;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\ParameterBag;
class MyRequest extends Request{
/**
* Override and extend the createFromGlobals function.
*
*
*
* @return Request A new request
*
* @api
*/
public static function createFromGlobals()
{
// Get what we would get from the parent
$request = parent::createFromGlobals();
// Add the handling for 'application/json' content type.
if(0 === strpos($request->headers->get('CONTENT_TYPE'), 'application/json')){
// The json is in the content
$cont = $request->getContent();
$json = json_decode($cont);
// ParameterBag must be an Array.
if(is_object($json)) {
$json = (array) $json;
}
$request->request = new ParameterBag($json);
}
return $request;
}
}
Теперь используйте класс в app_dev.php (или любой файл индекса, который вы используете)
// web/app_dev.php
$kernel = new AppKernel('dev', true);
// $kernel->loadClassCache();
$request = ForumBundleRequest::createFromGlobals();
// use your class instead
// $request = Request::createFromGlobals();
$response = $kernel->handle($request);
$response->send();
$kernel->terminate($request, $response);
sub list_module {
my $module = shift;
no strict 'refs';
return grep { defined &{"$module\::$_"} } keys %{"$module\::"}
}
ETA: если Вы хотите отфильтровать импортированные подпрограммы, можно сделать это
use B qw/svref_2object/;
sub in_package {
my ($coderef, $package) = @_;
my $cv = svref_2object($coderef);
return if not $cv->isa('B::CV') or $cv->GV->isa('B::SPECIAL');
return $cv->GV->STASH->NAME eq $package;
}
sub list_module {
my $module = shift;
no strict 'refs';
return grep { defined &{"$module\::$_"} and in_package(\&{*$_}, $module) } keys %{"$module\::"}
}
Класс:: Инспектор позволяет Вам получать информацию о загруженном классе. Большинство или вся эта информация могут быть найдены другими способами, но они не всегда очень дружелюбны, и обычно включают относительно высокий уровень колдовства Perl или странный и необычно выглядящий код. Класс:: Инспектор пытается предоставить более легкий, более дружественный интерфейс этой информации...
Взгляните на это: Класс:: Сниффинг
интерфейс является довольно специальным в данный момент и, вероятно, изменится. После создания нового экземпляра, называя метод отчета Ваш наилучший вариант. Можно тогда визуально исследовать его для поиска потенциальных проблем:
my $sniff = Class::Sniff->new({class => 'Some::Class'}); print $sniff->report;
Этот модуль пытается помочь программистам найти 'запахи кода' в объектно-ориентированном коде. Если это сообщает о чем-то, это не означает, что Ваш код является неверным. Это просто означает, что Вы могли бы хотеть посмотреть на свой код немного более тесно, чтобы видеть, есть ли у Вас какие-либо проблемы.
В настоящее время, мы принимаем крайний левый порядок поиска в глубину Perl по умолчанию. Мы можем изменить это в будущем (и существует обходное решение с методом путей. Больше на этом позже)...