我在建立新闻网站时遇到问题。我有多个索引函数可在类别视图中加载。在每个视图的内部,我希望能够通过使用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);
}
有人可以帮我吗?
感谢所有帮助
答案 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);
}
您可能需要调整以上内容以适合您的特定用例,但是原理通常是相同的。