Laravel在同一控制器中具有多种显示功能

时间:2019-02-27 09:08:05

标签: php laravel laravel-blade

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

这些是我使用的8种索引功能中的2种。

use App\Models\User;
use Illuminate\Support\Facades\Gate;

// ...

$notifiables = User::all()->filter(function(User $user) use($event) {
    return Gate::forUser($user)->allows('view', $event->project);
});

我想添加这样的显示功能

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);
}

有人可以帮我吗?

感谢所有帮助

1 个答案:

答案 0 :(得分:0)

我将通过另一种方法来解决这个问题。您只能为此使用一个控制器,并接受类别作为参数。例如,在您的路线中:

路线

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模型具有从属值。

在此示例中,您然后可以访问/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);
}

您可能需要调整以上内容以适合您的特定用例,但是原理通常是相同的。