【问题标题】:Laravel multiple show functions within the same controllerLaravel 在同一个控制器中的多个显示功能
【发布时间】:2019-07-20 22:50:57
【问题描述】:

我在制作新闻网站时遇到了问题。我有多个索引函数可以加载到类别视图中。在每个视图中,我希望能够使用 show 功能转到文章页面。如何在一个控制器中使用多个显示功能。

这些是我使用的 8 个索引函数中的 2 个。

public function indexbusiness()
{
    $artikels =  Artikel::where('category_id', '4')->get();
    return view('pages.business')->with('artikels', $artikels);
}

public function indextech()
{
    $artikels =  Artikel::where('category_id', '5')->get();
    return view('pages.tech')->with('artikels', $artikels);
}

我想添加这样的显示功能

 public function showbusiness($id)
{
    $artikel = Artikel::find($id);
    return view(pages.show);
}

有人可以帮我解决这个问题吗?

感谢所有帮助

【问题讨论】:

  • 为什么你想在一个控制器中拥有所有这些功能,而不是仅仅使用多个控制器,即你的应用程序有什么特定的好处?
  • 你不能创建一个索引函数并在url中添加category slug吗?
  • 因为在我实习期间,他们说没有必要为每个类别创建 8 个不同的控制器。他们说我只需 1 或 2 个就可以做到。所以我想弄清楚如何在一个控制器中执行多个显示功能
  • 是否仍然可以编辑我添加的一个控制器并为所有其他类别添加其他 7 个控制器?

标签: php laravel laravel-blade


【解决方案1】:

我会用不同的方法来解决这个问题。您可以只使用一个控制器并接受一个类别作为参数。例如在您的路线中:

路线

Route::get('/articles', 'ArticlesController@index');
Route::get('/articles/{category}', 'ArticlesController@index');

在您的控制器中,您将拥有一种索引方法。例如:

ArticleController

public function index($category)
{
    if($slug) {
        $articles = Article::whereHas('category', function ($query) use ($category) {
            $query->where('slug', $category);
        })->get();

        return view('pages'.$category)->with('articles', $articles);
    }

    $articles = Article::all();

    return view('pages.articles')->with('articles);
}

这将允许您按类别加载您想要的任何文章。这种方法假设您在 Article 模型上具有 category 关系,并且 Category 模型具有 slug 值。

对于此示例,您可以访问 /articles/tech/articles/business

然后您可以使用show 方法执行相同的方法。为此,您的路线可能如下所示:

路线

Route::get('/articles/{category}/{article}', 'ArticlesController@show');

你的控制器可能是

ArticleController

public function show($category, $id)
{
    $article = Article::whereHas('category', function (query) use ($category) {
        $query->where('slug', $category);
    })->where('id', $id)->first();

    return view('pages.show')->with('article', $article);
}

您可能需要调整以上内容以适合您的特定用例,但原则大体相同。

【讨论】:

  • 感谢您的回答。这可能有点难以实施,因为我还是一个初学者,但当我成功时我会批准你的答案。
猜你喜欢
  • 1970-01-01
  • 2017-02-11
  • 1970-01-01
  • 2020-02-27
  • 1970-01-01
  • 2015-12-05
  • 2020-10-20
  • 1970-01-01
  • 2015-08-29
相关资源
最近更新 更多