多蛞蝓Laravel路由将不工作,作出反应

问题描述 投票:0回答:1

我有一个Laravel后端/ React.js前端的应用程序。我使用的反应路由器,使这项工作我指着它加载与它们的组件视图控制器的任何路径。然而,当我在反应侧添加嵌套路由即“博客/:blogId”,它似乎完全跳过哪些组件被装载到标签,并显示我从Laravel视图代替内容。

我本来有:

`Route::get('/{slug?}', 'ProjectsController@index'`

我试过了:

`Route::any('{path}', function($path){
    $projects = Project::all();
    $posts = Post::all();
    return view('welcome', compact('projects', 'posts'));
})->where('path', '.*');`

这也不行:

`Route::get('/{slug?}/{id?}', 'ProjectsController@index'`

我要的是两个/blog和/ blog/2ProjectsController@index它加载与反应标签视图。

在ProjectsController我的索引功能的数据是:

  `$projects = Project::all();
    $posts = Post::all();

    //return $projects;
    return view('welcome', compact('projects', 'posts'));`

有没有人碰到这之前?谢谢。

更新:

欢迎视图由控制器索引方法返回:

<div id="content"></div>是我的基本组件被加载到。所以,导航到路由时“/博客”我看到我的组件,导航到时“/博客/什么”我看到Laravel的登录和注册链接。

`@extends('layout')

@section('content')

    @if (Route::has('login'))
        <div class="top-right links">
            @if (Auth::check())
                <a href="{{ url('/home') }}">Home</a>
            @else
                <a href="{{ url('/login') }}">Login</a>
                <a href="{{ url('/register') }}">Register</a>
            @endif
        </div>
    @endif

<div id="content"></div>

@include('partials._scripts')

@endsection`

利用链接的组成部分:

`<a href={`/blog/${item.id}`} target="_blank">View here</a>

                    <Route path="/blog/:blogId" component={Post} />`

我的基本成分以外的途径:

`<Switch>
<Route exact path="/" render={(props)=> <Home text={text} mobileNavIsOpen={hamburgerOpen} backgroundImage={background}/>} />
<Route path="/projects" component={Projects} />
<Route path="/blog" component={Blog} />
<Route component={NotFound} />
</Switch>`

我试着放置/博客/:在基础应用blogId路线与其他人一样 - 仍然没有区别。

更新:

当移除/博客/路由标记的反应路由器,只是保持“/博客/:blogId,它具有相同的效果。

UPDATE /部分解决:

添加(\\d+)我的反应路由器路径:路径= {} /blog/:id(\\d+)理所当然地把我送到了嵌套的组件。它确实也装载刀片查看内容,但是,这样一个临时的解决办法我已经采取了显示的刀片内容。将是一件好事,看是否有人有它周围的另一种方式。谢谢。

reactjs laravel react-router laravel-routing
1个回答
0
投票

尝试这个

Route::get('/{any}', 'ProjectController@index')->where('any', '.*');

这基本上是添加到路由/ web.php结束,因为很可能你正在试图建立一个SPA,并且希望所有的HTTP请求被处理反应路由器。

更新:基于您的更新我明白,你想同时/blog/blog/:ID通过同样的方法来处理。可以这样做

Route::get('blog/{id?}', 'ProjectController@index')->where('id', '[0-9]+');

如果您需要在索引方法的ID给它的第一个参数的方法,并将其发送给视图。

© www.soinside.com 2019 - 2024. All rights reserved.