我开始使用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';
}
}
Run Code Online (Sandbox Code Playgroud)
最后是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';
}
}
Run Code Online (Sandbox Code Playgroud)
在这个步骤之后,我在用户控制器中使用此语句成功使用了Usertype类:
$objUser = new User();
$objForm = $this->get( 'form.factory')->create( new UserType(), $objUser );
Run Code Online (Sandbox Code Playgroud)
但是当我尝试在客户端控制器中使用具有类似语法的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(),
));
}
}
Run Code Online (Sandbox Code Playgroud)
出现Class not found异常.
"ClassNotFoundException:尝试从C:\ wamp\www\Symfony\src\Acme\Gyvfiles\GyvefileBundle\Controller\ClientController.php第22行中的命名空间"Acme\Gyvfiles\GyvefileBundle\Form\Type"加载类"ClientType".你需要从另一个命名空间"使用"它?"
任何人都可以帮我解决这个问题吗?谢谢!
我刚遇到同样的问题.这是包含"Type"类的文件的错误名称.它必须与包含的类相同.
编辑:
这是关于PSR-0自动加载器.它尝试根据所需类的命名空间包含文件.所以Acme\Gyvfiles\GyvefileBundle\Form\Type\ClientType命名空间必须ClientType在{pathToSymfony}/Acme/Gyvfiles/GyvefileBundle/Form/Type/声明的文件夹中有一个类
namespace Acme\Gyvfiles\GyvefileBundle\Form\Type;
Run Code Online (Sandbox Code Playgroud)
在文件的开头.
这就是我的情况.希望能帮助到你!
我只能假设你正在打电话new ClientType或在你的控制器中进行类似操作?如果是这样,您应该在命名空间声明下添加,否则它会尝试在与调用类相同的文件夹中use Acme\Gyvfiles\GyvefileBundle\Form\Type\ClientType查找该类。ClientType
如果您使用名称空间,那么调用没有名称空间或没有声明为use'd 的类意味着它是相对调用的(因此在同一目录中)。
| 归档时间: |
|
| 查看次数: |
35202 次 |
| 最近记录: |