我有一个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/2
去ProjectsController@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+)
理所当然地把我送到了嵌套的组件。它确实也装载刀片查看内容,但是,这样一个临时的解决办法我已经采取了显示的刀片内容。将是一件好事,看是否有人有它周围的另一种方式。谢谢。
尝试这个
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给它的第一个参数的方法,并将其发送给视图。