【问题标题】:Call custom function of controller from ajax symfony2从 ajax symfony2 调用控制器的自定义函数
【发布时间】:2013-11-23 20:12:59
【问题描述】:

我使用 Sonata Admin Bundle 创建了表单。然后我创建了自己的控制器(TestController)并覆盖了 CRUD 控制器,

我在 TestController 中添加了一个新函数,

namespace IFI2\MainProjectBundle\Controller;

use Symfony\Component\Security\Core\SecurityContextInterface;
use Symfony\Bridge\Monolog\Logger;
use Sonata\AdminBundle\Controller\CRUDController as Controller;


//use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;

class TestController extends Controller
{

    public function getProductPricesAction() {

         file_put_contents("/Applications/XAMPP/htdocs/IFI2 CMS/Logs.txt","HELO",FILE_APPEND);

          return new Response(json_encode($response)); 

    }
}

然后我尝试通过我的 javascript 代码访问此功能,

<script type="text/javascript">

    function test1() {

        $.ajax({
            type:"POST",
            //dataType: "json",
            url: '{{ path('main_project.admin.test')}}',
            success: function(successMsg) {
                alert("successMsg");

            },
            error: function(errorMsg) {
                alert("errorMsg");

            }
        });
     }

</script>

这是我的 routing.yml,

main_project.admin.test:
  pattern:  /getProductPrices/
  defaults: { _controller: IFI2MainProjectBundle:Test:getProductPrices}

我已经有这个实体的 services.yml 条目,

main_project.admin.cobrand:
    class: MainProjectBundle\Admin\TestAdmin
    arguments: [~, MainProjectBundle\Entity\Test, "MainProjectBundle:Test"]
    tags:
        - {name: sonata.admin, manager_type: orm, group: admin, label: Test}
    calls:
        - [setTemplate, [edit, MainProjectBundle:Test:edit.html.twig]]

我的回复中出现以下错误,

没有为控制器MainProjectBundle\Controller\TestController和当前路由main_project.admin.test定义_sonata_admin

请帮我如何嵌入它?

谢谢, 费萨尔·纳西尔

【问题讨论】:

    标签: symfony symfony-2.1 sonata-admin symfony-2.3 symfony-sonata


    【解决方案1】:

    在您的 Admin 方法 configureRoutes 中添加新路由

    protected function configureRoutes(RouteCollection $collection)
    {
        parent::configureRoutes($collection);
        $collection->add('get_product_prices');
    }
    

    删除你的路线 main_project.admin.test

    新路由以您的管理员提供的 $baseRouteName 作为前缀并具有名称:

    base_route_name_get_product_prices
    

    使用

    {{ path('base_route_name_get_product_prices') }}
    //or with admin
    {{ admin.generateUrl('get_product_prices') }}
    

    【讨论】:

    • 如何在集合中添加路由参数?我想将 id 添加为参数
    • 两种变体都一样:path('base_route_name_get_product_prices',{'id': 1}) admin.generateUrl('get_product_prices',{'id': 1})
    【解决方案2】:

    在 routing.yml 添加以下内容:

    main_project.admin.test:
      pattern:  /getProductPrices/
      defaults: { _controller: IFI2MainProjectBundle:Test:getProductPrices,"_sonata_admin": "main_project.admin.cobrand" }

    【讨论】:

      猜你喜欢
      • 2012-03-10
      • 2012-09-22
      • 1970-01-01
      • 2014-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-11
      • 1970-01-01
      相关资源
      最近更新 更多