Laravel. Использование двух контроллеров в одном виде - PullRequest
0 голосов
/ 26 апреля 2020

Я действительно новичок в laravel. Так что я просто работаю над простым проектом. Я построил Postscontroller, у которого есть его представления. Так что проблема в том, что я хочу расширить это, чтобы иметь комментарии в view_one_post.blade. php view. Поэтому я должен создать CommentsController, но я не уверен, как составить список комментариев, используя CommentsController@index, и я не уверен, какое представление должен возвращать этот метод, потому что я использую комментарии в том же представлении сообщений, что и view_one_post.blade. php? Я видел несколько ответов на этот вопрос, но он просто не соответствует моему случаю

1 Ответ

0 голосов
/ 26 апреля 2020

Вы должны быть в состоянии достичь этого с помощью View Composer. Вы можете создать представление для комментариев, которое может быть включено в любые другие представления. Представление Composer позволит вам привязать данные к этому представлению перед его обработкой.

use App\Comment;
use Illuminate\View\View;

class CommentsComposer
{
    protected $comment;

    public function __construct(Comment $comment)
    {
        $this->comment = $comment;
    }

    public function compose(View $view)
    {
        $view->with('comments', $this->comment->latest()->take(10)->get());
    }
}

В методе boot поставщика услуг вы можете прикрепить composer к вашему представлению:

View::composer('partials.commments', 'App\Composers\CommentsComposer');

Везде, где вы хотите использовать это представление, вы можете просто включить его в Blade:

@include('partials.comments')

Это позволяет вам иметь изолированное место для логики c обработки данных, которые необходим для этого частичного взгляда, и это нужно только беспокоиться об этой одной ответственности. В отличие от контроллера, Composer не нужно беспокоиться об обработке запроса или ответа.

Laravel 7.x Документы - Представления - Просмотр композиторов View::composer

Laravel 7.x Документы - Blade - включая подвиды @include

...