Laravel 5.1:Class html不存在。

11

我直接从4.2升级到5.1版本,在使用Html和Form类时遇到了问题。

我按照升级说明进行了以下操作:

  • 将"laravelcollective/html": "~5.0"添加到composer.json文件中
  • 执行composer update命令
  • 在app.php文件的providers中添加Collective\Html\HtmlServiceProvider::class
  • 在app.php文件的aliases中添加'Form' => Collective\Html\FormFacade::class, 'Html' => Collective\Html\HtmlFacade::class

但是我的视图无法正常工作。当我使用HTML :: router时,会出现“Class HTML不存在”的错误提示;而当我使用link_to_route时,则会出现“Class html不存在”的错误提示。

我还尝试过使用Illuminate\html代替laravelcollective,并尝试执行了composer dump-autoload命令。

完整的错误提示如下:

ErrorException in Container.php line 736: Class html does not exist (View: C:\Dev\www\admin\resources\views\clubs\index.blade.php)
ReflectionException in Container.php line 736: Class html does not exist

我错过了什么?


我尝试了所有人给出的答案,但由于某种原因它们都没有对我起作用。最终,我创建了一个全新的 Laravel 应用程序,复制了我的代码,然后它开始工作了,所以虽然问题解决了,但实际问题仍然是个谜。


我可以问一下你的一个 blade 变量长什么样吗?是 {{!! Html.... !!}} 还是 {{ Html.... }} - camelCase
我尝试了各种方式,包括{{ }}和{!! !}},还试过Html、HTML和html,但都没有起作用。我正在考虑完全重新安装laravel,并从头开始工作。 - Michiel van der Blonk
更新:我不得不将所有内容恢复到Laravel 5.0,因为我的新服务器的PHP版本无法运行5.1。糟糕。 - Michiel van der Blonk
9个回答

16
在composer.json中添加。
 "illuminate/html": "5.*"

并运行composer update

打开你的config/app.php

在'providers'下面添加

Illuminate\Html\HtmlServiceProvider::class,

在“aliases”下添加

'Form'      => Illuminate\Html\FormFacade::class,
'Html'      => Illuminate\Html\HtmlFacade::class,

在您的刀片模板下,使用如下:

{!! HTML::style('assets/css/flatten.css') !!}

1
原因是在L5中,HTML和Form函数是框架的可选部分。它们不会默认包含在内,因为越来越多的人正在客户端完成所有模板工作。 - Kenmore
@Zuko 我安装了 http://laravelcollective.com/docs/5.1/html,这是从 illuminate/html 派生出来的,所以它们是一样的。请查看我的新答案获取更多信息。 - Michiel van der Blonk
@MichielvanderBlonk 官方的 Illuminate/Html 不再维护了吗?我原以为会继续维护,只是不再默认包含在框架中。 - Kenmore
@Zuko 不是的。刚才发生了更奇怪的事情。我执行了“composer update”命令,它自动将我的illuminate/html替换为laravelcollective/html。哦,撤销上面的话,我现在看到这只是一个依赖关系。 - Michiel van der Blonk
2
在Laravel 5.1中,你的所有解释都是正确的,但在视图中,“HTML::style”未定义。但是“Html::style”可以使用。谢谢。 - Morteza
在 Laravel 5.2 中,应将“Html”大写为“HTML”。 - hahahaha

10

在我的情况下,我的解决方案是与大小写敏感的类名有关的问题。

In my config/app.php (in aliases)
'Form'      => Collective\Html\FormFacade::class,
'Html'      => Collective\Html\HtmlFacade::class,

我试图在视图中使用这段代码:

{!! HTML::mailto('mailto:example@example.com', 'example@example.com'); !!}

那是一个错误:

"FatalErrorException in ccf70b1d0b9930d6c4e8f3859fff448f line 11: Class 'HTML' not found"

类名'HTML'是大小写敏感的。在配置文件(config/app.php)中应该使用'Html'。

希望这能对一些人有所帮助。


我已经修复了..'Form' => Collective\Html\FormFacade::class, 'Html' => Collective\Html\HtmlFacade::class, - Leoh

4
请将您的刀片文件从这个文件更改为:
{{ HTML::style('css/bootstrap.min.css') }}

to

{{ Html::style('css/bootstrap.min.css') }}

它正在运作。


谢谢,但是为什么?门面别名不区分大小写吗? - Flex Elektro Deimling

2

对我来说,只需在composer更新后简单地重新启动即可完美解决问题。我一直在寻找答案,但陷入了同样的困境。我建议运行config:cache和cache:clear,然后重新启动IDE。这样做就可以了。


1
我的问题已经解决了,但实际原因仍然未知。我创建了一个全新的 Laravel 安装,并复制了我的源代码(全部)。新的应用程序立即运行正常(在安装 illuminate/html 后)。
所以你认为我在包的使用上做错了什么?这也是我想到的,然后我对两个目录进行了比较,只发现它们完全相同。所以这是一个真正的谜团。
现在一切都正常了,我只需重命名我的新应用程序就可以继续了。
我知道在某些时候,我可能同时安装了 collective 和 illuminate 版本的 HTML 包。这很可能破坏了一切。

我使用laravel 5.1实现了这个..请参考此链接https://laravelcollective.com/docs/5.1/html..现在我的Html标签未找到的问题得到解决了。 - Priyanka Ahire
有趣的是,没有人解决我的问题,最终我自己解决了,结果只得到1个赞?LOL - Michiel van der Blonk

0

我想我已经找到了解决方案。

在你的app.php文件中,你已经声明了

'Form'      => Illuminate\Html\FormFacade::class,
'Html'      => Illuminate\Html\HtmlFacade::class,

在你的View中,你调用了相同的类

{!! HTML::style('css/bootstrap.min.css') !!}

以上标记答案中的软件包没有问题,而是与先前文档版本5.0.*中单词 HTML 的大小写不同。

应该是

'Form'      => Illuminate\Html\FormFacade::class,
'HTML'      => Illuminate\Html\HtmlFacade::class,

我尝试了所有情况,包括大写、小写、标题大小写等,但它们都不起作用。重新安装后(并使用相同的代码),它就可以正常运行了。请查看我的回答。 - Michiel van der Blonk
如果软件包出现问题,重新安装软件包后仍会出现相同的错误,因为源代码没有改变。 - madSkillz

0

0

试一下

php artisan cache:clear

php artisan clear-compiled


0

编辑 config/app.php

将以下内容添加到 providers

Collective\Html\HtmlServiceProvider::class,

并将其转换为别名

'Form' => Collective\Html\FormFacade::class,
'Html' => Collective\Html\HtmlFacade::class,

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接