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 上时,链接&lt;a href="project/add-project"&gt;..&lt;/a&gt; 将链接到相对 位置http://localhost/project/add-project

如果您已经在子文件夹http://localhost/project/ 中,则链接&lt;a href="project/add-project"&gt;..&lt;/a&gt; 将链接到相对 位置http://localhost/project/project/add-project

您可以通过在您的网址前加上斜线 / 来克服这个问题,告诉您的浏览器首先转到网站的最上方位置:在 http://localhost/project 上链接 &lt;a href="/project/add-project"&gt;..&lt;/a&gt;(注意 /)将首先链接到最上面的位置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 路由

Laravel 4 和 AngularJS - 使用路由清理 URL

如何将 JSON 返回数据作为参数传递给 URL 路由(laravel)

laravel 5 根据路由返回 HTML 或 JSON

如何在 Laravel 中使用两种语言生成路由的 url