【问题标题】:Two controllers one route laravel两个控制器一个路由 laravel
【发布时间】:2018-04-11 19:46:40
【问题描述】:

我目前可以显示索引页面以及帖子列表。用户可以选择帖子以查看帖子详细信息。为此,我有:

路线:

Route::get('/', 'PostsController@showPosts');

Route::get('post/{slug}', 'PostsController@showPostDetails');

控制器:

<?php

namespace App\Http\Controllers;

use App\Post;
use Illuminate\Http\Request;

class PostsController extends Controller
{

    public function showPosts()
    {
        $posts = Post::simplePaginate(2);
        return view('index', ['posts' => $posts]);
    }

    public function showPostDetails($slug)
    {
        $post = Post::findBySlug($slug);
        return view('post.show',['post'=>$post]);
    }
}

型号:

public static function findBySlug($slug)
{
    return static::where('slug', $slug)->first();
}

索引

@extends('layouts.index')

@section('header')
<!-- Page Header -->

<header class="masthead" style="background-image: url('img/home-bg.jpg')">
    <div class="overlay"></div>
    <div class="container">
        <div class="row">
            <div class="col-lg-8 col-md-10 mx-auto">
                <div class="site-heading">
                    <h1>Train Testing</h1>
                    <span class="subheading">Testing Times</span>
                </div>
            </div>
        </div>
    </div>
</header>
@stop
@section('content')
<div class="row">
    <div class="col-lg-8 col-md-10 mx-auto">

        @foreach ($posts as $post)
        @include('partials.post', ['post' => $post])
        @endforeach


        {{ $posts->links() }}


    </div>
</div>
@stop

partials/post.blade.php

<div class="post-preview">
    <a href="/post/{{ $post->slug }}">
        <h2 class="post-title">
            {{ $post->title }}
        </h2>
        <h3 class="post-subtitle">
            {{ $post->excerpt }}
        </h3>
    </a>
    <p class="post-meta">Posted by
        <a href="#">{{ $post->author->name }}</a>
        on {{ $post->created_at->format('l d F, Y') }}</p>
</div>
<hr>

我现在想在所有其他页面上显示帖子。我的其他页面目前有路由 Route::get('{slug}', 'PagesController@show'); 并且最初参考现有代码是有意义的,所以使用 Route::get('{slug}', 'PostsController@showPosts'); 就像我在主页上所做的那样在那里显示帖子。

但是我不确定处理这个问题的最佳方法,因为我相信一条路线不能有两个控制器。

对于我目前拥有的其他页面:

控制器:

<?php

namespace App\Http\Controllers;

use App\Page;
use Illuminate\Http\Request;

class PagesController extends Controller
{
    public function show($slug)
    {
        $page = Page::findBySlug($slug);
        return view('page', ['page' => $page]);
    }
}

page.blade:

@extends('layouts.index')

@section('header')


<!-- Page Header -->
<header class="masthead" style="background-image: url('/storage/{{ $page->image }}')">
    <div class="overlay"></div>
    <div class="container">
        <div class="row">
            <div class="col-lg-8 col-md-10 mx-auto">
                <div class="page-heading"> <h1>{!! $page->title !!}</h1>
                    <span class="subheading"></span>
                </div>
            </div>
        </div>
    </div>
</header>

@stop

@section('content')

<!-- Main Content -->

<div class="container">
    <div class="row">
        <div class="col-lg-8 col-md-10 mx-auto">
            {!! $page->body !!}



        </div>
    </div>
</div>


@stop

【问题讨论】:

    标签: laravel


    【解决方案1】:

    页面控制器:

    use App\Page;
    use App\Post;
    use Illuminate\Http\Request;
    
    class PagesController extends Controller
    {
        public function show($slug)
        {
            $posts = Post::simplePaginate(2);
            $page = Page::findBySlug($slug);
            return view('page', ['page' => $page, 'posts' => $posts]);
        }
    

    然后在 page.blade.php 我可以调用 $posts 没有任何错误:

        @foreach ($posts as $post)
        @include('partials.post', ['post' => $post])
        @endforeach
    
    
        {{ $posts->links() }}
    

    不确定这是否是最简洁的方法,但它有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-26
      • 1970-01-01
      • 2023-03-13
      • 2017-03-11
      • 2014-04-16
      • 1970-01-01
      • 2015-11-04
      • 2014-08-07
      相关资源
      最近更新 更多