在 Laravel 中将锚链接设置为地址,会出错
Posted
技术标签:
【中文标题】在 Laravel 中将锚链接设置为地址,会出错【英文标题】:Setting anchor link to an address in Laravel, gives error 【发布时间】:2017-05-01 21:39:38 【问题描述】:在我的 Laravel 应用程序中,当我尝试将在网站上发帖的人的用户名与他的个人资料页面链接时,使用代码:
<div class="media-body"><a href="@ post.user.profileUrl ">@ post.user.name </a>
它给出了错误:
抱歉,找不到您要查找的页面。
RouteCollection.php 第 161 行中的 1/1 NotFoundHttpException:
但是,当我尝试打印 @ post.user.profileUrl
时,它给出了正确的地址,也在 json 响应中,它给出了正确的地址,并且去该地址也到达了特定的位置。
所以,我不认为 post.user.profileUrl 有问题,因为它似乎工作正常,使用 href 似乎有问题,谷歌浏览器中的错误地址是:
http://localhost:8000/%7B%7B%20post.user.profileUrl%20%7D%7D
地址应该是
http://localhost:8000/users/2 其中 2 是指用户的 id,我通过 Vue.js 传递给用户
【问题讨论】:
post.user.profileUrl
不是有效路由。你想做什么?使用您自己的 JS 模板引擎从 ajax 创建链接? (车把/小胡子/等)
我正在使用 Vue.js,是的,Ajax 可以做到这一点,正如 post.user.profileUrl 给出的正确地址,问题在于添加到 href 或 @Ohgodwhy
您的模板试图将其解释为http://localhost:8000/%7B%7B%20post.user.profileUrl%20%7D%7D
,其中 %20 为空格,%7B 打开大括号 (),%7D 关闭大括号 ()。问题是您无法打印变量post.user.profileUrl
的值。尝试在跨度中打印它以检查它是否工作?
好的。试试<a href="post.user.profileUrl">
。检查它是否工作?
还要检查模板底部的<pre>@post | json</pre>
。您可以在问题中在这里发布 JSON 吗?
【参考方案1】:
问题是@ post.user.profileUrl
没有解析。 %7B%7B%20post.user.profileUrl%20%7D%7D
是 post.user.profileUrl
的 ASCII 表示
检查代码是否在.blade.php
文件中。如果是的话,你应该看看 JS 模板引擎,如果你正在使用的话。
https://laravel.com/docs/5.3/blade#blade-and-javascript-frameworks
@符号将被 Blade 移除;但是, name 表达式将保持不受 Blade 引擎影响,而是由您的 JavaScript 框架呈现
【讨论】:
实际上这是 Vue 2(我正在使用的 javascript 库)的问题,它们不再允许在引号(“)中使用,所以我提出了正确的答案,你可以检查一下,非常感谢您的回答,不过【参考方案2】:我认为您的视图中有一个$post
模型。当您设置模型Post
和User
之间的关系时,您可以通过以下方式链接到它们:
<a href=" url('/@'.$post->user->profileUrl) ">@ $post->user->name </a>
这会将用户profileUrl
转换为有效链接。但因此您必须在模型中设置关系。
后模型:
public function user()
return $this->hasMany('App\Users', 'id', 'user_id');
//first parameter is the Model class
//send is the id of the user table
//thirth is the user_id in the post table
在用户模型中:
public function posts()
return $this->hasMany('App\Posts', 'user_id', 'id');
希望这行得通!
【讨论】:
是的,我试过你的,但没有用,实际上是 Vue 2 的问题,它们不再允许在引号(“)中使用,所以我提出了正确的答案,你可以检查一下,非常感谢您的回答,不过【参考方案3】:试试这个...这绝对适合你
@verbatim
<div class="media-body">
<a href=" post.user.profileUrl ">
post.user.name
</a>
</div>
@endverbatim
【讨论】:
@Ronit 你试过我的回答了吗?我相信这应该可行。 是的,我试过你的,但没有用,实际上是 Vue 2 的问题,它们不再允许在引号(“)中使用,所以我提出了正确的答案,你可以检查一下,非常感谢您的回答,不过【参考方案4】:我遇到了问题,问题出在我正在使用的 javascript 库上,称为 vue.js,它曾经允许在引号内使用,但在 vue 2 中,它们不允许,所以有一个转机这个,
<a :href="post.user.profileUrl">@ post.user.name </a>
这很好用。
感谢所有通过回答做出贡献的人...
【讨论】:
以上是关于在 Laravel 中将锚链接设置为地址,会出错的主要内容,如果未能解决你的问题,请参考以下文章