Você já fez um controlador onde teve que trabalhar muito para preparar variáveis a serem passadas para uma visualização? Você pode mover esse tipo de trabalho para um chamado modelo de visualização. Em essência, os modelos de visualização são classes simples que pegam alguns dados e os transformam em algo utilizável para a visualização.
Você encontrará uma explicação mais detalhada e alguns bons exemplos nesta postagem do blog em Stitcher.io.
Os compositores de visualização nativos do Laravel não são iguais aos modelos de visualização fornecidos por este pacote. Para saber mais sobre as diferenças, acesse esta postagem do blog em Stitcher.io.
Investimos muitos recursos na criação dos melhores pacotes de código aberto. Você pode nos apoiar comprando um de nossos produtos pagos.
Agradecemos muito que você nos envie um cartão postal de sua cidade natal, mencionando qual(is) de nossos pacotes você está usando. Você encontrará nosso endereço em nossa página de contato. Publicamos todos os cartões postais recebidos em nosso mural virtual de cartões postais.
Você pode instalar o pacote via compositor:
composer require spatie/laravel-view-models
Um modelo de visualização é uma classe onde você pode colocar alguma lógica complexa para suas visualizações. Isso tornará seus controladores um pouco mais leves. Você pode criar um modelo de visualização estendendo o SpatieViewModelsViewModel
.
class PostViewModel extends ViewModel
{
public $ user ;
public $ post ;
public $ indexUrl = null ;
public function __construct ( User $ user , Post $ post = null )
{
$ this -> user = $ user ;
$ this -> post = $ post ;
$ this -> indexUrl = action ([PostsController::class, ' index ' ]);
}
public function post (): Post
{
return $ this -> post ?? new Post ();
}
public function categories (): Collection
{
return Category:: canBeUsedBy ( $ this -> user )-> get ();
}
}
Então você pode usar a classe de modelo de visualização em seu controlador assim:
class PostsController
{
public function create ()
{
$ viewModel = new PostViewModel (
current_user ()
);
return view ( ' blog.form ' , $ viewModel );
}
public function edit ( Post $ post )
{
$ viewModel = new PostViewModel (
current_user (),
$ post
);
return view ( ' blog.form ' , $ viewModel );
}
}
Em uma visualização você pode fazer isso:
< input type = " text " value = " {{ $post -> title } } " />
< input type = " text " value = " {{ $post -> body } } " />
< select >
@foreach ( $categories as $category )
< option value = " {{ $category -> id } } " > {{ $category -> name } } </ option >
@endforeach
</ select >
< a href = " {{ $indexUrl } } " >Back</ a >
Todos os métodos e propriedades públicas em um modelo de visualização são automaticamente expostos à visualização. Se não quiser que um método específico esteja disponível em sua visualização, você pode ignorá-lo.
class PostViewModel extends ViewModel
{
protected $ ignore = [ ' ignoredMethod ' ];
/ / …
public function ignoredMethod () { / * … * / }
}
Todos os métodos mágicos incorporados no PHP são ignorados automaticamente.
É possível retornar diretamente um modelo de visualização de um controlador. Por padrão, uma resposta JSON com os dados é retornada.
class PostsController
{
public function update ( Request $ request , Post $ post )
{
/ / …
return new PostViewModel ( $ post );
}
}
Essa abordagem pode ser útil ao trabalhar com formulários enviados por AJAX.
Também é possível retornar uma visualização diretamente:
class PostsController
{
public function update ( Request $ request , Post $ post )
{
/ / …
return ( new PostViewModel ( $ post ))-> view ( ' post.form ' );
}
}
Observe que quando o cabeçalho Content-Type
da solicitação é definido como JSON, essa abordagem também retornará dados JSON em vez de uma visualização renderizada.
Os modelos de visualização podem expor funções que requerem parâmetros extras.
class PostViewModel extends ViewModel
{
public function formatDate ( Carbon $ date ): string
{
return $ date -> format ( ' Y-m-d ' );
}
}
Você pode usar essas funções na visualização da seguinte forma:
{{ $ formatDate ( $post -> created_at ) } }
O pacote incluía um comando artesão para criar um novo modelo de visualização.
php artisan make:view-model HomepageViewModel
Este modelo de visualização terá o namespace AppViewModels
e será salvo em app/ViewModels
.
ou em um namespace personalizado, digamos, AppBlog
php artisan make:view-model " Blog/PostsViewModel "
Este modelo de visualização terá o namespace AppBlogViewModels
e será salvo em app/Blog/ViewModels
.
Consulte CHANGELOG para obter mais informações sobre o que mudou recentemente.
Consulte CONTRIBUINDO para obter detalhes.
Se você encontrou um bug relacionado à segurança, envie um email para [email protected] em vez de usar o rastreador de problemas.
A licença MIT (MIT). Consulte Arquivo de licença para obter mais informações.