Do not speak Portuguese? Translate this site with Google or Bing Translator
Laravel Normal Controller e o Resource Controller

Posted on: April 01, 2023 11:59 AM

Posted by: Renato

Categories: Laravel laravelphp

Views: 187

Diferença entre o Laravel Normal Controller e o Resource Controller

Difference Between Laravel Normal Controller And Resource Controller

Neste tutorial, aprenderemos a diferença entre controladores normais e de recursos fornecidos pelo framework laravel. Os dois controladores são muito vitais em nossa jornada de desenvolvimento de aplicativos usando o framework laravel. Sem perda de tempo, vamos mergulhar.

1. Recurso Laravel e Controlador Normal

Laravel Controlador Normal

O controlador normal do Laravel é o controlador que dá ao desenvolvedor a oportunidade de usar métodos personalizados que também mapeiam para rotas personalizadas.

Ao contrário do controlador de recursos, ele não possui  sinalizador --resource ao criá-lo. Execute o comando craft abaixo para criar o controlador normal:

php artisan make:controller PostController

O controlador será criado na pasta app/Http/Controllers e terá a aparência abaixo.

Lembre-se de que este controlador não possui nenhum método e o desenvolvedor tem a opção de criar seu próprio método que aponte para rotas personalizadas:

app/Http/Controllers/PostController.php

// app/Http/Controllers/PostController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class PostController extends Controller
{
    //
}

 

Laravel Resource ControllerName

Laravel resource controller é o controlador que contém todos os métodos, também conhecidos como métodos CRUD (Create, Retrieve, Update e Destroy) que executam todas as funcionalidades do banco de dados. Este controlador é criado exatamente como o controlador normal, mas com o sinalizador --resource . 

É um controlador muito útil na criação de aplicações que envolvam funcionalidades de banco de dados.

Também pode ser referido como controlador engenhoso e está listado entre as melhores práticas quando usado de forma eficaz no desenvolvimento de aplicativos laravel. Execute o comando artesão abaixo para criar este controlador:

php artisan make:controller PostController --resource

 

O controlador será criado na pasta app/Http/Controllers e ficará como abaixo:

app/Http/Controllers/PostController.php

// app/Http/Controllers/PostController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class PostController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        //
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        //
    }
}

 

Controlador de recursos com vinculação implícita de modelo

O controlador acima também pode ser criado usando o model binding implícito. Use o comando abaixo para incluir o model binding implícito:

php artisan make:controller Post\PostController --resource --model=Post

 

O controlador será criado na pasta app/Http/Controllers/Post e ficará como abaixo:

app/Http/Controllers/Post/PostController.php

// app/Http/Controllers/Post/PostController.php

<?php

namespace App\Http\Controllers\Post;

use App\Http\Controllers\Controller;
use App\Models\Post;
use Illuminate\Http\Request;

class PostController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        //
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //
    }

    /**
     * Display the specified resource.
     *
     * @param  \App\Models\Post  $post
     * @return \Illuminate\Http\Response
     */
    public function show(Post $post)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  \App\Models\Post  $post
     * @return \Illuminate\Http\Response
     */
    public function edit(Post $post)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\Models\Post  $post
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, Post $post)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\Models\Post  $post
     * @return \Illuminate\Http\Response
     */
    public function destroy(Post $post)
    {
        //
    }
}

 

 

 ...

2. Crie rotas normais do controlador e do controlador de recursos

As rotas do laravel são colocadas no arquivo web.php encontrado na pasta de rotas manualmente. 

Rotas CRUD do controlador normal do Laravel

Assumimos que a rota normal é fornecida com todos os métodos personalizados, ou seja, métodos CRUD, que apontam para suas respectivas rotas, então devem se parecer com abaixo:

rotas/web.php

// routes/web.php

<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\PostController;

Route::controller(PostController::class)->group(function(){
    Route::get('posts', 'index')->name('posts.index');
    Route::post('posts', 'store')->name('posts.store');
    Route::get('posts/create', 'create')->name('posts.create');
    Route::get('posts/{post}', 'show')->name('posts.show');
    Route::put('posts/{post}', 'update')->name('posts.update');
    Route::delete('posts/{post}', 'destroy')->name('posts.destroy');
    Route::get('posts/{post}/edit', 'edit')->name('posts.edit');
});

 

Rotas CRUD do Laravel Resource Controller

Ao contrário das rotas normais do controlador, que têm muitas rotas colocadas manualmente no arquivo routes/web.php, o controlador de recurso é escrito apenas uma vez com o sinalizador de recurso e se parece com o seguinte:

rotas/web.php

// routes/web.php

<?php

use Illuminate\Support\Facades\Route;

use App\Http\Controllers\Post\PostController;

Route::resource('posts', PostController::class);

 

A rota única acima cria várias rotas para lidar com funções CRUD que apontam para todos os métodos CRUD do controlador de recursos, conforme mostrado abaixo:

 

Verbo

URI

Ação

Nome da Rota

PEGAR

/Postagens

índice

posts.index

PEGAR

/postagens/criar

criar

postagens.criar

PUBLICAR

/Postagens

loja

posts.store

PEGAR

/postagens/{id}

mostrar

posts.mostrar

PEGAR

/postagens/{id}/editar

editar

posts.editar

PUT/PATCH

/postagens/{id}

atualizar

posts.update

EXCLUIR

/postagens/{id}

destruir

posts.destroy

 

O controlador de recursos que criamos usando  o php craftsman make:controller Post\PostController -- resource -- model=Post terá exatamente a mesma rota de recurso do controlador normal, mas nos bastidores gera as seguintes rotas.

Compare as rotas para o controlador de recurso de ligação de modelo implícito com as rotas do controlador de recurso comum. Espero que você tenha aprendido alguma coisa 🤣🤣.

A rota única acima também criará várias rotas para lidar com as funções CRUD, conforme mostrado abaixo.

Observe a associação de modelo implícito nas rotas em comparação com as rotas de recursos sem associação de modelo implícito. Espero que você esteja aprendendo algo:

Verbo

URI

Ação

Nome da Rota

PEGAR

/Postagens

índice

posts.index

PEGAR

/postagens/criar

criar

postagens.criar

PUBLICAR

/Postagens

loja

posts.store

PEGAR

/postagens/{postagem}

mostrar

posts.mostrar

PEGAR

/posts/{post}/editar

editar

posts.editar

PUT/PATCH

/postagens/{postagem}

atualizar

posts.update

EXCLUIR

/postagens/{postagem}

destruir

posts.destroy

 

Incluindo apenas métodos de recursos específicos

Às vezes, você gostaria de incluir métodos e rotas de recursos específicos do laravel após a geração normal do controlador de recursos. 

Isso é feito principalmente quando você gostaria de usar o controlador de recursos que já foi criado na criação de rotas de API sem criar o controlador de recursos de API que envolve o uso de --  sinalizador de API .

Você isentará os métodos create e edit que não são necessários nas rotas da API usando as  funções only() ou except() que são fornecidas pelo framework laravel. 

Essas funções são usadas nos métodos de construção do controlador de recursos ou na rota do controlador de recursos, conforme mostrado abaixo:

Excluir índice e mostrar rota

ao declarar as rotas de recursos, você pode usar o método except() para excluir o índice e mostrar a rota conforme abaixo:

use App\Http\Controllers\PostController;

Route::resource('photos', PostController::class)->except([
    'create', 'edit'
]);

Use apenas criar, atualizar e mostrar rota

O método laravel only() ajuda você a mostrar apenas os métodos necessários. Você pode usá-lo da mesma forma que o método except():

use App\Http\Controllers\PhotoController;

Route::resource('photos', PhotoController::class)->only([
    'create', 'update', 'show'
]);

Uau!! Terminamos de aprender sobre a diferença entre o controlador normal e o recurso usado no framewok laravel.

Esperamos que este artigo tenha ajudado muito você.

Por favor, deixe saber através dos comentários como você se sente sobre nossos tutoriais e qual seção você gostaria de falar. 

Fonte: 

- https://www.magnificcoding.com/article/difference-between-laravel-normal-controller-and-resource-controller


1

Share

Donate to Site


About Author

Renato

Developer

Add a Comment

Blog Search


Categories

OUTROS (15) Variados (109) PHP (130) Laravel (157) Black Hat (3) front-end (28) linux (113) postgresql (39) Docker (26) rest (5) soap (1) webservice (6) October (1) CMS (2) node (7) backend (13) ubuntu (54) devops (25) nodejs (5) npm (2) nvm (1) git (8) firefox (1) react (6) reactnative (5) collections (1) javascript (6) reactjs (7) yarn (0) adb (1) Solid (2) blade (3) models (1) controllers (0) log (1) html (2) hardware (3) aws (14) Transcribe (2) transcription (1) google (4) ibm (1) nuance (1) PHP Swoole (5) mysql (31) macox (4) flutter (1) symfony (1) cor (1) colors (2) homeOffice (2) jobs (3) imagick (2) ec2 (1) sw (1) websocket (1) markdown (1) ckeditor (1) tecnologia (14) faceapp (1) eloquent (14) query (4) sql (40) ddd (3) nginx (9) apache (4) certbot (1) lets-encrypt (3) debian (11) liquid (1) magento (2) ruby (1) LETSENCRYPT (1) Fibonacci (1) wine (1) transaction (1) pendrive (1) boot (1) usb (1) prf (1) policia (2) federal (1) lucena (1) mongodb (4) paypal (1) payment (1) zend (1) vim (4) ciencia (6) js (1) nosql (1) java (1) JasperReports (1) phpjasper (1) covid19 (1) saude (1) athena (1) cinnamon (1) phpunit (2) binaural (1) mysqli (3) database (42) windows (6) vala (1) json (2) oracle (1) mariadb (4) dev (12) webdev (24) s3 (4) storage (1) kitematic (1) gnome (2) web (2) intel (3) piada (1) cron (2) dba (18) lumen (1) ffmpeg (2) android (2) aplicativo (1) fedora (2) shell (4) bash (3) script (3) lider (1) htm (1) csv (1) dropbox (1) db (3) combustivel (2) haru (1) presenter (1) gasolina (1) MeioAmbiente (1) Grunt (1) biologia (1) programming (22) performance (3) brain (1) smartphones (1) telefonia (1) privacidade (1) opensource (3) microg (1) iode (1) ssh (3) zsh (2) terminal (3) dracula (1) spaceship (1) mac (2) idiomas (1) laptop (2) developer (37) api (4) data (1) matematica (1) seguranca (2) 100DaysOfCode (9) hotfix (1) documentation (1) laravelphp (10) RabbitMQ (1) Elasticsearch (1) redis (2) Raspberry (4) Padrao de design (4) JQuery (1) angularjs (4) Dicas (40) Kubernetes (2) vscode (2) backup (1) angular (3) servers (2) pipelines (1) AppSec (1) DevSecOps (4) rust (1) RustLang (1) Mozilla (1) algoritimo (1) sqlite (1) Passport (1) jwt (4) security (2) translate (1) kube (1) iot (1) politica (2) bolsonaro (1) flow (1) podcast (1) Brasil (1) containers (2) traefik (1) networking (1) host (1) POO (2) microservices (2) bug (1) cqrs (1) arquitetura (2) Architecture (3) sail (3) militar (1) artigo (1) economia (1) forcas armadas (1) ffaa (1) autenticacao (1) autorizacao (2) authentication (4) authorization (2) NoCookies (1) wsl (4) memcached (1) macos (2) unix (2) kali-linux (1) linux-tools (5) apple (1) noticias (2) composer (1) rancher (1) k8s (1) escopos (1) orm (1) jenkins (4) github (5) gitlab (3) queue (1) Passwordless (1) sonarqube (1) phpswoole (1) laraveloctane (1) Swoole (1) Swoole (1) octane (1) Structurizr (1) Diagramas (1) c4 (1) c4-models (1) compactar (1) compression (1) messaging (1) restfull (1) eventdrive (1) services (1) http (1) Monolith (1) microservice (1) historia (1) educacao (1) cavalotroia (1) OOD (0) odd (1) chatgpt (1) openai (3) vicuna (1) llama (1) gpt (1) transformers (1) pytorch (1) tensorflow (1) akitando (1) ia (1) nvidia (1) agi (1) guard (1) multiple_authen (2) rpi (1) auth (1) auth (1) livros (2) ElonMusk (2) Oh My Zsh (1) Manjaro (1) BigLinux (2) ArchLinux (1) Migration (1) Error (1) Monitor (1) Filament (1) LaravelFilament (1) replication (1) phpfpm (1) cache (1) vpn (1) l2tp (1) zorin-os (1) optimization (1) scheduling (1) monitoring (2) linkedin (1) community (1) inteligencia-artificial (2) wsl2 (1) maps (1) API_KEY_GOOGLE_MAPS (1) repmgr (1) altadisponibilidade (1) banco (1) modelagemdedados (1) inteligenciadedados (4) governancadedados (1) bancodedados (2) Observability (1) picpay (1) ecommerce (1) Curisidades (1) Samurai (1)

New Articles



Get Latest Updates by Email