对于想了解php–Symfony3.3.3–默认控制器和容器的读者,本文将是一篇不可错过的文章,我们将详细介绍php默认值,并且为您提供关于Ajax调用Symfony控制器、php–symfony/F
对于想了解php – Symfony 3.3.3 – 默认控制器和容器的读者,本文将是一篇不可错过的文章,我们将详细介绍php默认值,并且为您提供关于Ajax 调用 Symfony 控制器、php – symfony / FOSRestBundle:空的JSON响应(使用symfony体现的序列化程序)、php – Symfony 2.1 – 在控制器中切换Monolog通道、php – Symfony 2控制器beforeAction是否存在?的有价值信息。
本文目录一览:- php – Symfony 3.3.3 – 默认控制器和容器(php默认值)
- Ajax 调用 Symfony 控制器
- php – symfony / FOSRestBundle:空的JSON响应(使用symfony体现的序列化程序)
- php – Symfony 2.1 – 在控制器中切换Monolog通道
- php – Symfony 2控制器beforeAction是否存在?
php – Symfony 3.3.3 – 默认控制器和容器(php默认值)
Attempted to call an undefined method named "getParameter" of class "AppBundle\Controller\DefaultController".
这是:
'base_dir' => realpath($this->getParameter('kernel.project_dir')).DIRECTORY_SEParaTOR,
在3.3.3版Symfony控制器扩展之前
Symfony\Bundle\FrameworkBundle\Controller\Controller.PHP
现在扩展:
Symfony\Bundle\FrameworkBundle\Controller\AbstractController\AbstractController.PHP
那么……我如何从容器中获取数据?在文档(3.3和4.0版本)中,Controller扩展了Controller,而不是AbstractController.
如果我将AbstractController更改为Controller应用程序运行良好,但我应该更改吗?
解决方法
Ajax 调用 Symfony 控制器
如何解决Ajax 调用 Symfony 控制器?
我正在尝试使用 ajax 调用一个方法。 ajax连接成功,没有出现错误提示。
JS 代码
$("[id^=changeStatus]").each(function(){
$(this).on("click",function(){
const id = $(this).data(''id'');
console.log(id);
$.ajax({
type: "POST",url: "{{url(''change_order_status'')}}",data: id,async: false,})
.done(function() {
console.log(''success'');
})
.fail(function () {
console.log(''error'');
});
});
但是控制器中的方法似乎不起作用。 控制器
/**
* @Method("POST")
* @Route("/%eccube_admin_route%/",name="change_order_status")
* @param $request
* @return \Symfony\Component\HttpFoundation\JsonResponse
*/
public function changeOrderStatus(Request $request)
{
if (!$request->isXmlHttpRequest()) {
throw new BadRequestHttpException();
}
$this->logger->info("it''s working");
dump($rquest);
}
我不知道它有什么问题。 请帮忙。
我将 js 作为片段插入到每个页面中,这就是它无法正常工作的原因。
解决方法
您必须在控制器中返回 Response 类的实例。所以在这里,你可以做的是返回一个 JsonResponse
return new JsonResponse($request->getContent());
,
也许你可以试试这个。
$("[id^=changeStatus]").each(function(){
$(this).on("click",function(){
const id = $(this).data(''id'');
console.log(id);
$.ajax({
type: "POST",url: "{{ path(''change_order_status'') }}",data: {
id : id
},async: false,})
.done(function(data) {
console.log(data)
console.log(''success'');
})
.fail(function () {
console.log(''error'');
});
});
/**
* @Route("/%eccube_admin_route%/",name="change_order_status",methods={"POST"})
* @param $request
* @return \Symfony\Component\HttpFoundation\JsonResponse
*/
public function changeOrderStatus(Request $request)
{
if (!$request->isXmlHttpRequest()) {
throw new BadRequestHttpException();
}
$this->logger->info("it''s working");
$id = $request->request->get(''id'');
// Try to dump your request
// dd($request);
return $this->json([
''success'' => true
]);
}
我只是不知道 eccube_admin_route 是什么意思。 并且不要忘记在您的控制器类中扩展 AbstractController
这是我项目中的示例。尝试转储您的控制器对象并使用 symfony 调试栏打开您的 ajax 请求,点击 url 列
php – symfony / FOSRestBundle:空的JSON响应(使用symfony体现的序列化程序)
如果我“格式化”PHP数组中的代码,代码工作正常:
public function getPlacesAction(Request $request) { $places = $this->get('doctrine.orm.entity_manager') ->getRepository('AppBundle:Place') ->findAll(); /* @var $places Place[] */ $formatted = []; foreach ($places as $place) { $formatted[] = [ 'id' => $place->getId(),'name' => $place->getName(),'address' => $place->getAddress(),]; } return new JsonResponse($formatted); }
但后来我尝试直接序列化$places,使用fost Rest的视图处理程序(在config.yml中)
fos_rest: routing_loader: include_format: false view: view_response_listener: true format_listener: rules: - { path: '^/',priorities: ['json'],fallback_format: 'json' }
并将我的控制器中的功能更改为以下代码,我得到了我的JSON响应,但“{[],[],[]}”之间没有任何内容(我的数据库中有3个条目):
public function getPlacesAction(Request $request) { $places = $this->get('doctrine.orm.entity_manager') ->getRepository('AppBundle:Place') ->findAll(); /* @var $places Place[] */ return $places; }
这是我关于stackoverflow的第一篇文章,所以我希望我的问题很清楚,祝你有愉快的一天.
解决方法
services: object_normalizer: class: Symfony\Component\Serializer\normalizer\GetSetMethodnormalizer # Important! Tag this service or it wouldn't work tags: - { name: serializer.normalizer }
我仍然无法理解为什么它有效但突然间我有一个很好的json作为回应.
php – Symfony 2.1 – 在控制器中切换Monolog通道
我知道这可以用不同的通道完成,我在几个服务中使用它,但我不太清楚在控制器中切换Monolog通道.
在服务中,您只需通过服务定义中的tags属性定义通道,但是如何在控制器中执行此操作,或者在特定操作中更好?
我知道可能的解决方案是:Symfony 2 : Log into a specific file
但是,仅仅为了记录到自定义文件来定义两个新服务似乎有些过分.
由于频道是自动创建的,目前没有其他办法,但这是一个有趣的请求,你不是第一个,所以我创建了一个issue on MonologBundle,允许在捆绑配置级别定义频道.这样你就可以使用$this-> get(‘monolog.logger.mychannel’)从控制器中获取正确的记录器(如果通道存在,你已经可以这样做了,但如果你想为控制器设置自定义通道则不行没有别的用途).
更新:
从symfony / monolog-bundle 2.4.0开始,您可以将其他渠道定义为:
monolog: channels: ["foo","bar"]
然后您可以将其检索为$this-> get(‘monolog.logger.mychannel’)
php – Symfony 2控制器beforeAction是否存在?
对于Symfony 2控制器有没有像beforeAction这样的方法?此外,是否有整个捆绑/项目的通用beforeAction?
解决方法:
不,遗憾的是symfony2中没有preExecute等价物,但您可以访问更强大的事件模型.
This article解释了如何添加监听器.
您要监听的事件是onCoreController
另见:http://symfony.com/doc/2.0/book/internals.html#the-event-dispatcher
关于php – Symfony 3.3.3 – 默认控制器和容器和php默认值的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于Ajax 调用 Symfony 控制器、php – symfony / FOSRestBundle:空的JSON响应(使用symfony体现的序列化程序)、php – Symfony 2.1 – 在控制器中切换Monolog通道、php – Symfony 2控制器beforeAction是否存在?的相关知识,请在本站寻找。
本文标签: