Symfony2尝试从全局命名空间加载类。你忘记了“使用”声明吗?

时间:2015-08-11 01:11:53

标签: php class symfony

我有一个我在Symfony2中开发的项目。我有一个PHP类“buildComponent”,我写了它构建我的所有表单元素。当我在我的开发机器上运行应用程序/网站时,一切正常,并且除了“buildComponent”类之外,一切都在上传到我的Web主机的prod模式下工作正常。我从全局命名空间中收到错误“尝试加载类”buildComponent“。您是否忘记了”使用“语句?”。

初始脚本(在开发模式下工作|在prod模式下不起作用)

include $view["assets"]->getUrl("php/formComponents.php");
global $formComponents;
$formComponents = new buildComponent();

我尝试声明命名空间但是出现了一个错误,声明必须在脚本的开头。我以为我会在我的Controller中进行调用,但是已经声明了一个命名空间,所以我认为我可以声明“使用”。

我尝试在上面的脚本开头和控制器中声明“使用”但我仍然得到加载类错误。我也尝试了“require_once”,但没有任何成功。

我也尝试过清除cach并安装网络资源。

我用Symfony2开发了大约一个月,这是我遇到的第一个真正的问题。我确信这是一个新手问题,如果这很简单,我道歉。

formComponents.php脚本位于@ web / php / formComonents.php。

<?php

class buildComponent{

    public function buildElement($id){

        return 'Example';

    }

}

?>

试图调用该类的页面位于@src / Solutions / SolutionsBundle / Resources / views / pages / contactUs.html.php

<?php $view->extend('::default.html.php') ?>
/*contactUs.html.php*/
<?php
/*Throwing Class not found error.*/
include $view["assets"]->getUrl("php/formComponents.php");
global $formComponents;
$formComponents = new buildComponent();

?>


    <!--Document Specific Stylesheets and Scripts-->
<?php $view['slots']->start('header') ?>
    <link href="<?php echo $view['assets']->getUrl('css/formComponents.css') ?>" rel="stylesheet" />
<?php $view['slots']->stop() ?>




    <!--Document Body-->
<?php $view['slots']->start('body') ?>

    <div class="inputContainer">
        <?php echo $formComponents->returnInputTitle('Create Username/ID'); ?>
        <?php echo $formComponents->returnTextField('txtUserID', 'txtUserID','text','Create Username/ID'); ?>
    </div>

<?php $view['slots']->stop() ?>




    <!--Document Specific Javascript-->
<?php $view['slots']->start('jscript') ?>

<?php $view['slots']->stop() ?>

堆栈跟踪

[1] Symfony\Component\Debug\Exception\ClassNotFoundException: Attempted to load class "buildComponent" from the global namespace.
Did you forget a "use" statement?
    at n/a
        in /home/blubyrdstudios/public_html/solutions/src/Solutions/SolutionsBundle/Resources/views/pages/contactUs.html.php line 7

1 个答案:

答案 0 :(得分:1)

哇。最后。 26小时后我终于开始工作了。它并不是我真正想要的,但只要与Re-Usable Code和Bundles保持一致,它就是合乎逻辑的。

在我的Bundle&#34; Solutions \ SolutionsBundle \&#34;我创建了一个目录&#34; Model&#34;。我将formComponents.php脚本移动到此目录。

然后我为&#34; formComponents.php&#34;

创建了命名空间
namespace Solutions\SolutionsBundle\Model

现在在我的contactUs.html.php页面中,我可以宣布使用。

use Solutions\SolutionsBundle\Model\formComponents as formBuilder;
global $buildForms;
$buildForms = new formBuilder();

文件的命名与我在问题中发布的内容略有不同。原因是我在某处读到包含该类的文件的名称必须是=该类的名称。(仍然试图找到一些关于此的文档来确认它)所以我改变了类名称#34 ; buildComponent&#34; to&#34; formComponents&#34;。

现在一切似乎都运行良好。如果有人有更好的解决方案或其他可行的解决方案,我很乐意看到它。谢谢你的帮助。