在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>";
答案 0 :(得分:3)
每当你把你的类放在一个命名空间中时,你在该类中引用的任何其他类都假定它也在同一个命名空间中,除非你另有说明。
因此,当您直接引用Arg\Tagcloud
时将名称空间设置为Request::url()
,PHP认为您告诉它使用Request
内的Arg\Tagcloud
类命名空间。
有两个解决方案:
在\
前添加Request
告诉PHP使用全局命名空间,而不是Arg\Tagcloud
命名空间。
例如,<a href='".\Request::url()."/myroute/'>
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()
。