Laravel 前缀路由和 json 文件 url 不匹配
Posted
技术标签:
【中文标题】Laravel 前缀路由和 json 文件 url 不匹配【英文标题】:Laravel prefix route and json file url is not matching 【发布时间】:2020-04-21 07:57:01 【问题描述】:我正在尝试 Laravel 6 前缀。我的问题是当我从我的主页http://localhost:8000/
访问我的侧边栏http://localhost:8000/project/add-project
它是文件但是当我尝试我的侧边栏http://localhost:8000/project/add-project
到我的侧边栏http://localhost:8000/project/add-project
或其他侧边栏时,它总是添加一个额外的项目词,如下所示: http://localhost:8000/project/project/add-project
我的路线:
Route::prefix('project')->group(function ()
Route::get('/add-project', 'ProjectsController@addProject')->name('projects-add-project');
Route::post('/add-project', 'ProjectsController@processAddProject')->name('projects-add-project');
Route::get('/active-project-list', 'ProjectsController@activeProjectList')->name('active-project-list');
);
我的 json 文件:
"menu": [
"url":"/", "name":"Dashboard", "slug":"dashboard", "badgeClass": "badge badge-warning badge-pill float-right mr-2", "icon":"feather icon-home",
"url":"","navheader":"Projects","icon":"",
"url":"", "name":"Project", "icon":"feather icon-layers",
"submenu": [
"url":"project/add-project", "name":"Add Project", "icon":"feather icon-plus-circle", "i18n":"nav.add_project",
"url":"project/active-project-list" , "name":"Active Projects", "icon":"feather icon-list", "i18n":"nav.active_projects",
"url":"#", "name":"Hold Projects", "icon":"feather icon-list", "i18n":"nav.hold_projects",
"url":"#", "name":"Completed Projects", "icon":"feather icon-list", "i18n":"nav.completed_projects",
"url":"#", "name":"Cancelled Projects", "icon":"feather icon-list", "i18n":"nav.cancelled_projects",
"url":"#", "name":"All Projects List", "icon":"feather icon-list", "i18n":"nav.all_projects_list"
]
]
我的子菜单类:
<ul class="menu-content">
@foreach($menu as $submenu)
<?php
$submenuTranslation = "";
if(isset($menu->i18n))
$submenuTranslation = $menu->i18n;
?>
<li class=" (request()->is($submenu->url)) ? 'active' : '' ">
<a href=" $submenu->url ">
<i class=" isset($submenu->icon) ? $submenu->icon : "" "></i>
<span class="menu-title" data-i18n=" $submenuTranslation "> $submenu->name </span>
</a>
@if (isset($submenu->submenu))
@include('panels/submenu', ['menu' => $submenu->submenu])
@endif
</li>
@endforeach
</ul>
有什么办法可以解决吗,我可以用路由代替网址吗?如果可以,我该怎么做?
【问题讨论】:
在网址中添加斜杠:"url":"/project/add-project"
和 "url":"/project/active-project-list"
我用您可能想要接受的“一些”解释做出了回答,因此可以将此问题标记为已解决。谢谢
【参考方案1】:
问题是您在链接中使用了相对 url。当您不在任何子文件夹中时,这不会造成问题:
在http://localhost
上时,链接<a href="project/add-project">..</a>
将链接到相对 位置http://localhost/project/add-project
。
如果您已经在子文件夹http://localhost/project/
中,则链接<a href="project/add-project">..</a>
将链接到相对 位置http://localhost/project/project/add-project
。
您可以通过在您的网址前加上斜线 /
来克服这个问题,告诉您的浏览器首先转到网站的最上方位置:在 http://localhost/project
上链接 <a href="/project/add-project">..</a>
(注意 /
)将首先链接到最上面的位置http://localhost
,然后转到project/add-project
,得到http://localhost/project/add-project
。
tl;博士:
在您的 json 文件中,在您的 url 前面加上一个斜杠以使其绝对:
"url":"/project/add-project" ..
"url":"/project/active-project-list" ..
【讨论】:
以上是关于Laravel 前缀路由和 json 文件 url 不匹配的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 5.0.* 中间件在处理路由之前从 url 中删除前缀语言环境
Laravel 4 和 AngularJS - 使用路由清理 URL