Php 拥有多个Slug的Laravel路线赢得';我不在办公室工作
我有一个带有Laravel后端/React.js前端的应用程序。我正在使用react路由器,以便使其工作,我有任何指向控制器的路径,该控制器加载视图中的组件。但是,当我在react端添加嵌套路由(即“blog/:blogId”)时,它似乎完全跳过了加载组件的标记,而是从Laravel视图向我显示内容 我最初有:Php 拥有多个Slug的Laravel路线赢得';我不在办公室工作,php,reactjs,laravel,react-router,laravel-routing,Php,Reactjs,Laravel,React Router,Laravel Routing,我有一个带有Laravel后端/React.js前端的应用程序。我正在使用react路由器,以便使其工作,我有任何指向控制器的路径,该控制器加载视图中的组件。但是,当我在react端添加嵌套路由(即“blog/:blogId”)时,它似乎完全跳过了加载组件的标记,而是从Laravel视图向我显示内容 我最初有: `Route::get('/{slug?}', 'ProjectsController@index'` 我试过: `Route::any('{path}', function($pat
`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
,用于加载带有react标记的视图
ProjectsController中“我的索引”函数中的数据为:
`$projects = Project::all();
$posts = Post::all();
//return $projects;
return view('welcome', compact('projects', 'posts'));`
以前有人见过这个吗?谢谢
更新:
控制器索引方法返回的欢迎视图:
是我的基本组件加载到的位置。因此,当导航到路由“/blog”时,我会看到我的组件,当导航到“/blog/anywhere”时,我会看到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`
`@extends('layout'))
@节(“内容”)
@if(Route::has('login'))
@if(Auth::check())
@否则
@恩迪夫
@恩迪夫
@包括('partials.\u scripts')
@端部`
使用链接的组件:
`<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>`
`
} />
`
我试着将/blog/:blogId路径与其他路径一起放在基本应用程序中-仍然没有区别
更新:
从react router中删除/blog/route标记并仅保留“/blog/:blogId”时,它具有相同的效果
更新/部分解决:
将(\\d+)
添加到我的react路由器路径:path={/blog/:id(\\d+)
}正确地将我带到嵌套组件。不过,它也加载了刀片视图内容,因此作为临时修复,我取出了显示的刀片内容。如果有人有别的办法,那就太好了。谢谢。试试这个
Route::get('/{any}', 'ProjectController@index')->where('any', '.*');
这基本上添加到routes/web.php的末尾,因为您很可能正在尝试构建SPA,并且希望所有http请求都由react路由器处理
更新:
根据您的更新,我了解到您希望/blog
和/blog/:ID
采用相同的方法处理。可以这样做
Route::get('blog/{id?}', 'ProjectController@index')->where('id', '[0-9]+');
如果需要index方法中的ID,请将其作为该方法的第一个参数,并将其发送到视图 试试这个
Route::get('/{any}', 'ProjectController@index')->where('any', '.*');
这基本上添加到routes/web.php的末尾,因为您很可能正在尝试构建SPA,并且希望所有http请求都由react路由器处理
更新:
根据您的更新,我了解到您希望/blog
和/blog/:ID
采用相同的方法处理。可以这样做
Route::get('blog/{id?}', 'ProjectController@index')->where('id', '[0-9]+');
如果需要index方法中的ID,请将其作为该方法的第一个参数,并将其发送到视图 如果您想要blog/:blogId句柄由laravel route处理?Hi@aseferov,这并不是我想要它由laravel route处理,而是我需要将任何路径(包括它们的子路径)指向处理我的组件的视图,以便react工作。因此,如果我想要blog:/blogId,我需要告诉laravel routes也将这些路径指向视图。请添加视图部分,在其中导航用户blog/:blogIdcomponent@aseferov请参阅上面更新的内容您需要更改react链接组件如果您想要blog/:blogId handles by laravel route?Hi@aseferov,这并不是我希望它由laravel route处理,而是我需要将任何路径(包括它们的子路径)指向处理我的组件的视图,以便对工作做出反应。因此,如果我想要blog:/blogId,我需要告诉laravel routes也将这些路径指向视图。请添加视图部分,在其中导航用户blog/:blogIdcomponent@aseferov请参阅上面更新的内容,您需要更改以响应链接组件,这会给我相同的结果,它只在我返回控制器方法中的数据时起作用,而在我返回视图时不起作用。当我返回一个视图并导航到/blog/2时,它会返回blade.php数据。当我返回视图并导航到just/blog时,它将加载前端组件。请参阅上面更新的问题,了解我的控制器函数中的内容。我尝试了建议的更新方法-相同的结果,我甚至将id传递给组件,并特别告诉它导航到/blog/id,id是控制器中的变量,但什么都没有。这给了我相同的结果,它只在我返回控制器方法中的数据时起作用,而在我返回视图时不起作用。当我返回一个视图并导航到/blog/2时,它会返回blade.php数据。当我返回视图并导航到just/blog时,它将加载前端组件。请参阅上面更新的问题,了解我的控制器函数中的内容。我尝试了建议的更新方法-同样的结果,我甚至将id传递给组件,并特别告诉它导航到/blog/id,id是控制器中的变量,但什么都没有。