在 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 的值。尝试在跨度中打印它以检查它是否工作? 好的。试试&lt;a href="post.user.profileUrl"&gt;。检查它是否工作? 还要检查模板底部的&lt;pre&gt;@post | json&lt;/pre&gt;。您可以在问题中在这里发布 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 模型。当您设置模型PostUser 之间的关系时,您可以通过以下方式链接到它们:

<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 中将锚链接设置为地址,会出错的主要内容,如果未能解决你的问题,请参考以下文章

使用jQuery滚动到锚链接[重复]

使用jQuery滚动到锚链接[重复]

使用 <base> 时使锚链接指向当前页面

滚动时多个菜单锚链接会突出显示

Typo3 v.8.7 - 无法设置锚链接

移动应用锚链接跳转到固定标题下方