自动加载器期望的类[...]在文件

时间:2016-11-02 15:32:29

标签: symfony

我是Symfony 3的新手。我尝试解决我的两个控制器的问题。 当我执行indexAction函数时,我遇到了这个错误:

  

自动加载器预期类" Arcturus \ GeomancieBundle \ Controller \ TirageController"在文件" / Applications / MAMP / htdocs / geomancie2 / geomancie / vendor / composer /../../ src / Arcturus / GeomancieBundle / Controller / TirageController.php"中定义。找到了该文件,但该类不在其中,类名或命名空间可能有拼写错误。

我发现这可能是班上的一个错字......但确实找不到任何错误。

这是我的两个控制员:

DefaultController.php

<?php

namespace Arcturus\GeomancieBundle\Controller;
namespace Arcturus\GeomancieBundle\Entity;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\Form;
use Symfony\Component\HttpFoundation\Request;
use Arcturus\GeomancieBundle\Entity;

class DefaultController extends Controller
{
    public function indexAction(Request $request) {
        $tirage = new Tirage();
        $formTirage = $this->createFormBuilder($tirage)->getForm();

        // Si le formulaire a été soumis

        $formTirage->handleRequest($request);

        if ($formTirage->isSubmitted() && $formTirage->isValid()) {
            $tirage = $formTirage->all();

            return $this->redirectToRoute('arcturus_geomancie_tirage', $tirage);
        }

        // Si le formulaire n'a pas été soumis

        return $this->render('ArcturusGeomancieBundle:Default:index.html.twig', array(
           'form' => $formTirage->createView(),
        ));
    }
}

TirageController.php

<?php

namespace Arcturus\GeomancieBundle\Controller;
namespace Arcturus\GeomancieBundle\Entity;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;

class TirageController extends Controller
{
    public function afficherTirageAction(Tirage $tirage)
    {
        // On compte le nombre de points dans chaque chaîne
        $nb_dot_l1 = $this->nbDot($tirage->getLigne1());
        $nb_dot_l2 = $this->nbDot($tirage->getLigne2());
        $nb_dot_l3 = $this->nbDot($tirage->getLigne3());
        $nb_dot_l4 = $this->nbDot($tirage->getLigne4());

        // On vérifie que les 4 chaînes contriennent au moins 1 point
        if ($nb_dot_l1 == 0 or $nb_dot_l2 == 0 or $nb_dot_l3 == 0 or $nb_dot_l4 == 0) {
            // On renvoie sur une page d'erreur
            $this->renderView('@ArcturusGeomancie/Default/erreur_tirage.html.twig');
        }

        // On charge les lignes dans un tableau paire/impaire
        $tab_dots_lines = $this->dots_to_array($nb_dot_l1, $nb_dot_l2, $nb_dot_l3, $nb_dot_l4);
        // On garde ce format pour dessiner la figure
        $data['dessin'] = $tab_dots_lines;
        // On récupère le nom de la figure
        $data['figure'] = $this->get_figure($tab_dots_lines);
        // On récupère l'analyse associée
        $data['analyse'] = $this->get_analysis($data['figure']);

        $this->renderView('@ArcturusGeomancie/Default/tirage.html.twig', $data);
    }
[...]

Tirage.php(实体)

<?php

class Tirage
{
    private $ligne1;
    private $ligne2;
    private $ligne3;
    private $ligne4;

    public function getLigne1()
    {
        return $this->ligne1;
    }

    public function getLigne2()
    {
        return $this->ligne2;
    }

    public function getLigne3()
    {
        return $this->ligne3;
    }

    public function getLigne4()
    {
        return $this->ligne4;
    }
}

?>

我的目录树:

enter image description here

有人可以帮我找到我的错误吗?

谢谢:)

4 个答案:

答案 0 :(得分:12)

文件中的命名空间存在问题。

删除行

namespace Arcturus\GeomancieBundle\Entity;

来自DefaultController.php和TirageController.php,并把它放在Tirage.php中

<?php

namespace Arcturus\GeomancieBundle\Entity;

class Tirage
{

您可以在此处详细了解命名空间:http://php.net/manual/en/language.namespaces.php

答案 1 :(得分:4)

对于那些使用

的人

这是一个巧妙的技巧。将 src 目录标记为“Sources Root”,这样只要在 src 目录中创建文件,它就会自动添加正确的命名空间。

这有助于避免错误:

  

自动加载器期望的类[...]在文件

中定义

以下是显示如何将目录标记为“Sources Root”的图像。

mark directory as sources root

答案 2 :(得分:2)

你的命名空间有点过了,你只需要把一个放在put类中。

控制器应具有单个命名空间;

namespace Arcturus\GeomancieBundle\Controller;

并且您的实体的名称空间应为;

namespace Arcturus\GeomancieBundle\Entity;

另外,您是否正确设置了路由? 如果您正在使用注释,例如(在app / config / routing.php中);

app:
    resource: "@GeomancieBundle/Controller/"
    type: annotation

my_route:
    path: /my-url
    defaults:   {_controller: ArcturusGeomancieBundle:Tirage:afficherTirage }

答案 3 :(得分:0)

我发现了同样的错误,但又遇到了另一个问题。 我将一个文件夹从Appbundle / controller / Myfolder移至Appbundle / Myfolder。 在那之后,我不断地得到那个错误。 我正在使用git并且服务器版本与本地版本不匹配,因此我看不到服务器中存在重复的文件夹,因为自动上传未删除

因此,如果上传在删除文件时失败,则手动更新/同步服务器可能有助于解决此错误。