GVKun编程网logo

php – Symfony 3.3.3 – 默认控制器和容器(php默认值)

5

对于想了解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默认值)

php – Symfony 3.3.3 – 默认控制器和容器(php默认值)

我下载了最后一个稳定版的Symfony(3.3.3)并且在开始时我有错误:

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应用程序运行良好,但我应该更改吗?

解决方法

他们已经在symfony标准版上有 reverted the change了,所以我会说回到Controller而不是AbstractController是可行的方法.

Ajax 调用 Symfony 控制器

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 作为片段插入到每个页面中,这就是它无法正常工作的原因。

enter image description here

enter image description here

解决方法

您必须在控制器中返回 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

Try to dump your controller object and use symfony debugbar to open your ajax request,click on url columns

这是我项目中的示例。尝试转储您的控制器对象并使用 symfony 调试栏打开您的 ajax 请求,点击 url 列

php – symfony / FOSRestBundle:空的JSON响应(使用symfony体现的序列化程序)

php – symfony / FOSRestBundle:空的JSON响应(使用symfony体现的序列化程序)

我正在学习使用symfony构建API(使用FOSRestBundle).我正在学习法语教程.显然,我首先尝试自己编写代码,但即使使用复制/粘贴,当我向相应的路径(rest-api.local / places)发出GET请求时,它仍然会让我获得空的 JSON数组.

如果我“格式化”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的第一篇文章,所以我希望我的问题很清楚,祝你有愉快的一天.

解决方法

在我的app / config / services.yml中我添加了这个:

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通道

php – Symfony 2.1 – 在控制器中切换Monolog通道

我想登录与通常的dev.log或prod.log不同的文件

我知道这可以用不同的通道完成,我在几个服务中使用它,但我不太清楚在控制器中切换Monolog通道.

在服务中,您只需通过服务定义中的tags属性定义通道,但是如何在控制器中执行此操作,或者在特定操作中更好?

我知道可能的解决方案是:Symfony 2 : Log into a specific file

但是,仅仅为了记录到自定义文件来定义两个新服务似乎有些过分.

唯一的方法是定义 controller as a service并使用自定义通道注入自定义记录器.

由于频道是自动创建的,目前没有其他办法,但这是一个有趣的请求,你不是第一个,所以我创建了一个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是否存在?

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是否存在?的相关知识,请在本站寻找。

本文标签: