首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Symfony2试图从全局命名空间加载类。你忘了一份“使用”声明了吗?

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

Stack Overflow用户
提问于 2015-08-11 01:11:52
回答 1查看 8.4K关注 0票数 0

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

初始脚本(在dev模式下工作,在prod模式下不工作)

代码语言:javascript
复制
include $view["assets"]->getUrl("php/formComponents.php");
global $formComponents;
$formComponents = new buildComponent();

我试图声明命名空间,但得到了一个错误,声明必须在脚本的开头。我以为我会在Controller中进行调用,但是已经声明了一个名称空间,所以我认为我可以声明"use“。

我尝试在上面的脚本开头和控制器中声明"use“,但是仍然得到了load类错误。我也尝试过"require_once“,但都没有成功。

我也尝试过清除cach和安装web资产。

我已经用Symfony2开发了大约一个月,这是我第一个真正的问题。我相信这是个新手的问题,如果事情很简单,我很抱歉。

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

代码语言:javascript
复制
<?php

class buildComponent{

    public function buildElement($id){

        return 'Example';

    }

}

?>

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

代码语言:javascript
复制
<?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() ?>

堆栈跟踪

代码语言:javascript
复制
[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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-11 18:03:01

哇。终于来了。26小时后,我终于开始工作了。这并不是我真正想要的,但就符合可重用代码和Bundles的要求而言,这是合乎逻辑的。

在我的包“SolutionsBundle”中,我创建了一个目录"Model“。我将我的formComponents.php脚本移到了这个目录。

然后我为"formComponents.php“创建了命名空间。

代码语言:javascript
复制
namespace Solutions\SolutionsBundle\Model

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

代码语言:javascript
复制
use Solutions\SolutionsBundle\Model\formComponents as formBuilder;
global $buildForms;
$buildForms = new formBuilder();

文件的命名与我在问题中发布的内容略有不同。原因是我在某个地方读到了包含类的文件名必须为=类的名称。(仍然试图找到一些关于这个类的文档来确认它),所以我将类名从"buildComponent“改为"formComponents”。

现在一切似乎都很顺利。如果有人有更好的解决方案或更多的解决方案,我很乐意看到它。谢谢你的帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31931635

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档