在Symfony上创建表单时出现解析错误

时间:2016-04-14 02:03:33

标签: forms symfony parsing

我在Symfony上创建了一个表单,我收到了以下错误:

  

解析错误:语法错误,意外'类' (T_CLASS),期待标识符(T_STRING)或变量(T_VARIABLE)或' {'或者' $'在第39行的C:\ wamp \ www \ estore \ src \ Estore \ AdminBundle \ Controller \ AdminController.php中。

第39行是:

namespace Estore\AdminBundle\Controller;
use Estore\AdminBundle\Entity\Categories;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;

class AdminController extends Controller
{
    /**
     * @Route("/admin/index")
     */
    public function indexAction()
    {
        return new Response("Testing Routing on Admin Bundle to go to sleep");
    }


    /**
     * @Route("/admin/createcategories")
     */
    public function createCategoriesAction(Request $request)
    {

        $categories = new Categories();

        $form = $this->createFormBuilder($categories)
                     ->add('category', TextType::class)
                     ->add('description', TextType::class)
                     ->add('save', SubmitType::class, array('label' => 'Create Category'))
                     ->getForm();
        return $thi->render('EstoreAdminBundle:Default:create_category.html.twig', array(
            'form' => $form->createView(),
        ));
    }
}

完整代码:

Stack Trace

in src\Estore\AdminBundle\Controller\AdminController.php at line 39  -
    $categories = new Categories(); 
    $form = $this->createFormBuilder($categories) 
                 ->add('category', TextType::class) 
                 ->add('description', TextType::class) 
                 ->add('save', SubmitType::class, array('label' => 'Create Category')) 
                 ->getForm(); 

          at Composer\Autoload\includeFile () 
          in vendor\composer\ClassLoader.php at line 301   

          at ClassLoader ->loadClass () 
          at ReflectionClass ->__construct () 
          in vendor\symfony\symfony\src\Symfony\Component\Routing\Loader\AnnotationDirectoryLoader.php at line 52  

          at AnnotationDirectoryLoader ->load () 

这里是Stack Trace信息的一部分:

function initialize() {
    var mapProp = {
       center : center,
       zoom : 5,
       mapTypeId : google.maps.MapTypeId.ROADMAP
    };
    map=new google.maps.Map(document.getElementById("googleMap"),mapProp);
    google.maps.event.addListener(map, "click", function (event) {
        alert('You click the map!');
    });
}

我正在使用从两台计算机检出的git存储库。在其中一个我没有这个问题。它们之间的区别是具有上述错误的计算机在wamp上运行PHP版本5.4.26。 Symfony版本2.8.4-DEV - app / dev / debug

4 个答案:

答案 0 :(得分:0)

我认为问题是由于php版本

使用class作为常量的名称仅在PHP 5.5中可用。

要获取班级名称,您应该使用TextType::classget_class(new TextType)替换->add('category', 'text')

答案 1 :(得分:0)

:: class仅从PHP 5.5开始支持。

这是Symfony Upgrade md文件的引用,在升级到Symfony 3或将php升级到5.5之前,请使用' text'而不是FQCN的实施。

  

不推荐使用类型名称,将在Symfony 3.0中删除。您应该使用完全限定的类名(FQCN)来引用它们,而不是按名称引用类型。使用PHP 5.5或更高版本,您可以使用"类"不变的那样:

这将解决您的问题:

->add('category', 'text')

答案 2 :(得分:0)

其他答案是正确的,需要php> = 5.5才能使::class正常工作。与他们相反,我更喜欢使用

->add('category', 'Symfony\Component\Form\Extension\Core\Type\TextType')
这样FQCN已经存在。当您升级到php> = 5.5和/或Symfony 3.0时,这将继续工作,不需要更新。

答案 3 :(得分:0)

  

返回   $ thi->呈现(' EstoreAdminBundle:默认:create_category.html.twig&#39 ;,   阵列(               '形式' => $形式 - > CreateView的(),           ));

$this->render