ClassNotFoundException:尝试加载类... Symfony

时间:2013-12-08 01:21:17

标签: php symfony

我开始使用Symfony大约5-7天前,如果我的问题非常简单,抱歉,但我无法找到解决问题的方法。 我创建了2个表单类 - UserType和ClientType。它们之间的区别在于ClientType形式中存在很少的附加字段。 这是Usertype类:

namespace Acme\Gyvfiles\GyvefileBundle\Form\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;

class UserType extends AbstractType
{
  public function buildForm(FormBuilderInterface $builder, array $options)
  {
    $builder->add('name', 'text');
    $builder->add('username', 'text');
    $builder->add('email', 'email', array(
        'attr' => array('class'=>'email') ) );
    $builder->add('Password', 'repeated', array(
        'first_name'  => 'password',
        'second_name' => 'confirm',
        'type'        => 'password',
    ));
    $builder->add( 'roles', 'choice', array(
        'choices' => array('ROLE_SYSTEM_ADMIN' => 'System Administrator', 'ROLE_ACCOUNT_ADMIN' => 'Account Manager', 'ROLE_UPLOADER' => 'Uploader'),
        'mapped' => false ) );
    $builder->add('is_active', 'checkbox', array(
        'label'     => 'Active (user can log in)',
        'required'  => false,
    ));
    $builder->add('add_user', 'submit');
}

  public function setDefaultOptions(OptionsResolverInterface $resolver)
  {
      $resolver->setDefaults(array(
        'data_class' => 'Acme\Gyvfiles\GyvefileBundle\Entity\User'
    ));
  }

  public function getName()
  {
    return 'user';
  }
}

最后是ClientType类。所有相同的,除了这部分: 的更新

<?php
namespace Acme\Gyvfiles\GyvefileBundle\Form\Type;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;

class ClientType extends AbstractType
{
  public function buildForm(FormBuilderInterface $builder, array $options)
  {
    $builder->add('name', 'text');
    $builder->add('username', 'text');
    $builder->add('email', 'email', array(
        'attr' => array('class'=>'email') ) );
    $builder->add('Password', 'repeated', array(
        'first_name'  => 'password',
        'second_name' => 'confirm',
        'type'        => 'password',
    ));
    $builder->add('address', 'text');
    $builder->add('telephone', 'text');
    $builder->add('internalContactName', 'text');telephone
    $builder->add( 'roles', 'checkbox', array(
        'choices' => array('label' => 'Client can upload', ),
        'required'  => false ) );
    $builder->add('is_active', 'checkbox', array(
        'label'     => 'Active (user can log in)',
        'required'  => false,
    ));
    $builder->add('add_client', 'submit');
  }

  public function setDefaultOptions(OptionsResolverInterface $resolver)
  {
    $resolver->setDefaults(array(
        'data_class' => 'Acme\Gyvfiles\GyvefileBundle\Entity\Client'
    ));
  }

  public function getName()
  {
    return 'client';
  }
}

在这些步骤之后,我已成功地在用户控制器中使用了Usertype类:

 $objUser = new User();
 $objForm = $this->get( 'form.factory')->create( new UserType(), $objUser ); 

但是当我尝试在客户端控制器中使用具有类似语法的ClientType时:

更新:ClientController     

use Acme\Gyvfiles\GyvefileBundle\Entity\Permission;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
use Symfony\Component\Security\Core\SecurityContext;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Security\Core\Util\StringUtils;

use Acme\Gyvfiles\GyvefileBundle\Entity\Client;
use Acme\Gyvfiles\GyvefileBundle\Form\Type\ClientType;

class ClientController extends Controller
{
  public function addclientAction()
  {
    $em = $this->get( 'doctrine' )->getEntityManager();
    $objClient = new Client();
    $objForm = $this->get( 'form.factory')->create( new ClientType(), $objClient );
    //$objForm->add('address', 'text');
    return $this->render( 'AcmeGyvfilesGyvefileBundle:Client:addclient.html.twig', array(
        'form'  =>  $objForm->createView(),
    ));
  }
}

出现Class not found异常。

“ClassNotFoundException:在C:\ wamp \ www \ Symfony \ src \ Acme \ Gyvfiles \ GyvefileBundle \ Controller \ ClientController.php中从名称空间”Acme \ Gyvfiles \ GyvefileBundle \ Form \ Type“加载类”ClientType“ 22.您是否需要从另一个名称空间“使用”它?“

任何人都可以帮我解决这个问题吗?谢谢!

8 个答案:

答案 0 :(得分:7)

我刚遇到同样的问题。这是包含“Type”类的文件的错误名称。它必须与包含的类相同。

修改

这是关于PSR-0自动加载器。它尝试根据所需类的命名空间包含文件。因此,给定Acme\Gyvfiles\GyvefileBundle\Form\Type\ClientType命名空间,必须在ClientType文件夹中使用

声明{pathToSymfony}/Acme/Gyvfiles/GyvefileBundle/Form/Type/
namespace Acme\Gyvfiles\GyvefileBundle\Form\Type;

在文件的开头。

这就是我的情况。希望它有所帮助!

答案 1 :(得分:5)

我已经按照你的描述遇到了这个问题,但是当我从我正在实例化的类名中取出一个下划线时它就消失了。您没有下划线,但无论如何都要尝试更改名称。

答案 2 :(得分:2)

我只能假设您正在调用new ClientType或控制器中的喜欢?如果是这样,您应该在命名空间声明下添加use Acme\Gyvfiles\GyvefileBundle\Form\Type\ClientType,否则它会尝试在与调用类相同的文件夹中找到类ClientType

如果您正在使用名称空间,则调用没有名称空间的类或不将其声明为use'd表示它是相对调用的(因此在同一目录中)。

答案 3 :(得分:2)

对我帮助composer dump-autoload --optimize,因为之前我执行了composer dump-autoload --optimize

答案 4 :(得分:0)

我得到那个错误的时间我的实体就像下面那样:

/**
 * InspectionPlanting
 *
 * @ORM\Table(name="inspectionplanting")
 * @ORM\Entity(repositoryClass="Pencode\ForestryBundle\Entity\ClientProfileRepository")

我所做的就是将其更改为不包括我的存储库:

/**
 * InspectionPlanting
 *
 * @ORM\Table(name="inspectionplanting")
 * @ORM\Entity

最后一个有效。 希望这有助于某人

答案 5 :(得分:0)

当我遇到类似错误时:

尝试加载类\&#34; CreateImportJobHandler \&#34;来自命名空间\&#34; NG \ Command \&#34;。\ n你忘记了\&#34;使用\&#34;另一个命名空间的语句?

我在使用CreateImportJobHandler的类中使用了正确的use语句,但在xml服务配置中却很糟糕。

必须

<parameter key="ng.command.handler.create_import_job_handler.class">NG\Command\Groups\CreateImportJobHandler</parameter>

答案 6 :(得分:0)

在我的情况下,我在课程文件名中输入了一个拼写错误:filename为Syncroniser但类名为Synchronizer

答案 7 :(得分:0)

在您的控制器中(或在捆绑软件的defautController-> indexAction->中),如果您使用具有捆绑软件名称的渲染调用,例如:“ $ this-> render('MyBundle:Default:index.html.twig ');” 您需要添加如下这样的Use Bundle:“在以下位置使用PathBundle \ MyBundle作为MyBundle: