29

私はSymfony 2.3に取り組んでおり、新しいルートと新しいコントローラーを宣言しましたが、ブラウザーからこのコントローラーを呼び出すと、次のエラーが発生します。

The controller for URI "/user/1" is not callable. in /dev.mydomain.org/vendor/symfony/symfony/src/Symfony/Component/HttpKernel/Controller/ControllerResolver.php at line 82

これは私の簡単なルート構成です:

user_homepage:
    pattern:  /user
    defaults: { _controller: UserBundle:Default:index }
    
user_show:
    pattern:  /user/{id}
    defaults: { _controller: UserBundle:Default:show }
    requirements:
        id:  \d+

そして、これは私の非常に単純なコントローラーです:

public function showUserAction($id)
{        
    return $this->render('UserBundle:Default:show.html.twig', array());
}

なにが問題ですか?

4

9 に答える 9

74

論理名UserBundle:Default:showUserBunde\Controller\DefaultController::showAction、 というメソッドがあることを示しますshowUserAction

メソッド名を にshowAction変更するか、論理名を に変更してUserBundle:Default:showUserください。

于 2013-07-30T09:11:54.957 に答える
4

あなたはあなたのコントローラー関数をshowUserAction定義していますが、定義の中でそれはshow[Action].

ルート構成を変更するか

user_show:
    pattern:  /user/{id}
    defaults: { _controller: UserBundle:Default:showUser }
    requirements:
        id:  \d+

またはコントローラーの署名を変更します

public function showAction($id)
{

これが役立つかどうかを確認してください

于 2013-07-30T09:11:17.137 に答える
3

大きな検索の後、これは私にとってはうまくいきました:

1.- CRUDController を作成する

// src/Acme/DemoBundle/Controller/CRUDController.php

namespace Acme\DemoBundle\Controller;

use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Sonata\AdminBundle\Controller\CRUDController as Controller;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Inter\PimeBundle\Entity\Empresa;

class CRUDController extends Controller
{
    public function publicarAction($id)
    {
       //code here...
    }
}

2.- サービスを作成する

# app/config/config.yml
services:
    ebtity.admin.service:
        class: Acme\DemoBundle\Admin\EntityAdmin
        tags:
            - { name: sonata.admin, manager_type: orm, group: group, label: label }
        arguments:
            - NULL
            - Acme\DemoBundle\Entity\Entity
            - AcmeDemoBundle:EntityAdmin

3.- アクション ボタンのテンプレートを作成する

{# src/Acme/DemoBundle/Resources/views/CRUD/list__action_publicar.html.twig #}

<a class="btn btn-sm" href="{{ admin.generateObjectUrl('publicar', object) }}">Publicar</a>

4.- ルートを構成する

// src/Acme/DemoBundle/Admin/EntityAdmin.php

namespace Acme\DemoBundle\Admin;

// ...

use Sonata\AdminBundle\Route\RouteCollection;

class EntityAdmin extends Admin
{
     // ...

    protected function configureListFields(ListMapper $listMapper)
    {
        $listMapper
            ->addIdentifier('name')
            ->add('engine')
            ->add('rescueEngine')
            ->add('createdAt')
            ->add('_action', 'actions', array(
                'actions' => array(
                    'publicar' => array(
                        'template' => 'AcmeDemoBundle:CRUD:list__action_publicar.html.twig'
                    )
                )
            ));
    }

    protected function configureRoutes(RouteCollection $collection)
    {
        $collection
                ->add('publicar', 
                    $this->getRouterIdParameter().'/publicar',
                    array('_controller' => 'AcmeDemoBundle:CRUD:publicar')    
                );
    }
}

5.-キャッシュをクリアする

それが役に立てば幸い

于 2014-11-19T15:11:25.040 に答える
-1

このエラーの原因の 1 つは、コントローラーのメソッド名の後に「Action」という単語を追加し忘れたことです。ルーティングに問題がないと思われる場合は、メソッド名を確認してください。

于 2014-07-04T08:41:16.487 に答える