如何在 laravel 的单个控制器中传递多个路由

Posted

技术标签:

【中文标题】如何在 laravel 的单个控制器中传递多个路由【英文标题】:How to passing multiple routes in single controller in laravel 【发布时间】:2019-11-22 20:30:27 【问题描述】:

我需要在单个控制器中传递多个路由。

我有 about uscontact us 在部分视图中都从数据库中检索,所以我想通过 footer 访问它们。当您从footer 单击它时,它应该链接到关于我们联系我们 页面。 提前感谢您的任何建议,我将不胜感激。

这里是控制器、路由、视图

控制器

class MainController extends Controller

    public function index()
    
        $categories = Category:: All();
        $footers = Footer::with('subfooters')->get();

        return view('combine.combined', compact('categories', 'footers'));
    

    public function foot(Request $request, $id)
    
        $categories = Category:: All();
        $footers = Footer::with('subfooters')
            ->where('id', '=', $id)
            ->get();

        return view('combine.combined', compact('footers', 'categories'));
    

路线

Route::get('/', 'MainController@foot')->name('pages.index');
Route::get('aboutus/id', 'MainController@foot')->name('combine.combined');
Route::get('contactus/id', 'MainController@foot')->name('combine.combined');

部分页脚视图

@if($subfooter->id == 1)
    <a href=" route('combine.combined', ['id' => $subfooter->id])">$subfooter->name</a>
@endif

组合-组合 Vievs

@extends('layouts.master')

@section('header')
    @include('partials.header')
@stop

@section('content')
    @include('pages.index')
    @include('pages.aboutus')
@stop

@section('footer')
    @include('partials.footer')
@stop

项目结构

.Root
..Resource
...View
....Combine
.....combined.blade.php
....Pages
.....contactus.blade.php
.....aboutus.blade.php
....Partials
.....footer.blade.php``

【问题讨论】:

【参考方案1】:

将多条路由指向同一个控制器并不是您正确预期的问题。问题出在这里:

public function foot(Request $request, $id)

把这个改成

public function foot($id, Request $request)

【讨论】:

【参考方案2】:

如果我理解正确,您希望能够在一个控制器中拥有多个路由,为此您必须在控制器中拥有多个功能。

Route::get('/whatever', 'ControllerName@functionInController');

function functionInController() 
    //Will be called on /whatever

控制器中的 @ 本质上选择控制器中的哪个功能,这样您就可以有一个用于联系我们和了解等。

【讨论】:

我试过 Route::get('aboutus/id', 'MainController@foot');在视图中导致错误函数 App\Http\Controllers\MainController::foot() 的参数太少,通过了 1 个,预期正好有 2 个

以上是关于如何在 laravel 的单个控制器中传递多个路由的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 4:如何传递多个可选参数

多个控制器的单个 Laravel 路由

Laravel - 如何通过资源路由将变量传递给控制器​​?

Laravel 将 url 参数从控制器传递到路由

Laravel - 如何将参数从控制器传递到路由并在另一个控制器中使用它?

如何laravel视图里访问其他控制器的路由