未找到Laravel 4类和名称空间

时间:2014-03-03 19:34:42

标签: php laravel namespaces

在Laravel 4网站中,我安装了一个标签云库。在这个库中,我希望编辑一个函数的返回行(我在这里简化了它):

return "<span>
      {$Variable}
    </span>";

并将$ variable作为链接:

return "<span>
       <a href='".Request::url()."/myroute/'>
         {$variable}
       </a>
    </span>";

当我尝试运行该页面时,我收到错误:

Class 'Arg\Tagcloud\Request' not found 

我认为这可能意味着在classcloud类中看不到Request类,它与名称空间有关。

在tagcloud类文件的顶部有以下行:

<?php namespace Arg\Tagcloud;
use Illuminate\Support\Facades\Facade;

我找到了这个页面(laravel命名空间列表)     http://laravel.com/api/index.html

我已经使用了

    use Illuminate\Routing;

     use Illuminate;

我在上面的前两个'use'语句下方添加了它们但是我得到了相同的错误(找不到类)。是找到正确的命名空间还是别的什么?有人可以帮忙吗?感谢。

编辑:我发现这种方式在不使用的情况下做我想做的事         Request :: url():

        return "<span>
       <a href='/mysitename/public/myroute/{$variable}'>
         {$variable}
       </a>
    </span>";

2 个答案:

答案 0 :(得分:3)

每当你把你的类放在一个命名空间中时,你在该类中引用的任何其他类都假定它也在同一个命名空间中,除非你另有说明。

因此,当您直接引用Arg\Tagcloud时将名称空间设置为Request::url(),PHP认为您告诉它使用Request内的Arg\Tagcloud类命名空间。

有两个解决方案:

解决方案1 ​​

\前添加Request告诉PHP使用全局命名空间,而不是Arg\Tagcloud命名空间。

例如,<a href='".\Request::url()."/myroute/'>

解决方案2

use班级。

只需将use Request添加到类的顶部(在命名空间下),这将让PHP知道您要使用此类,但它不属于当前命名空间。

如,

<?php namespace Arg\Tagcloud;

use Request;

答案 1 :(得分:0)

  

当我尝试运行该页面时,我收到错误:

     

Class 'Arg\Tagcloud\Request' not found

这是因为您正在使用Request命名空间中的Arg\Tagcloud类,当您使用Request::someMethod()框架时Request类位于相同名称空间下的内容:

Arg\Tagcloud\Request

但实际上,Request类位于Illuminate\Http命名空间之下,这就是错误发生的原因。要解决这个问题,您可以使用以下内容:

\Request::someMethod();

或者您可以在课程顶部使用以下内容:

use \Request;

您不需要使用use Illuminate\Request;,因为Request外观类在全局命名空间(作为别名)中可用,它将解析Illuminate\Http\Request类。因此,您可以在代码中直接使用Request::someMethod()