Aqui está um tutorial passo a passo para criar um CRUD (Create, Read, Update, Delete) de produtos em Laravel:
- Instalar o Laravel: Antes de tudo, você precisa instalar o Laravel. Para fazer isso, você precisa ter o composer instalado na sua máquina. Em seguida, abra o terminal e execute o seguinte comando:
phpCopy codecomposer create-project --prefer-dist laravel/laravel nome-do-projeto
- Criar o modelo de produtos: Execute o seguinte comando para criar o modelo de produtos:
phpCopy codephp artisan make:model Product -m
- Criar a tabela de produtos: Agora, você precisa criar a tabela de produtos no banco de dados. Para isso, edite o arquivo
database/migrations/{timestamp}_create_products_table.php
e adicione as colunas desejadas para a tabela de produtos. Por exemplo:
phpCopy code<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateProductsTable extends Migration
{
public function up()
{
Schema::create('products', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name');
$table->text('description');
$table->decimal('price', 8, 2);
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('products');
}
}
Em seguida, execute o seguinte comando para criar a tabela no banco de dados:
Copy codephp artisan migrate
- Criar o controlador de produtos: Execute o seguinte comando para criar o controlador de produtos:
phpCopy codephp artisan make:controller ProductController
- Adicionar rotas para as operações CRUD: Edite o arquivo
routes/web.php
e adicione as seguintes rotas para as operações CRUD:
phpCopy codeRoute::get('/products', 'ProductController@index');
Route::get('/products/create', 'ProductController@create');
Route::post('/products', 'ProductController@store');
Route::get('/products/{id}/edit', 'ProductController@edit');
Route::put('/products/{id}', 'ProductController@update');
Route::delete('/products/{id}', 'ProductController@destroy');
- Aqui está um exemplo de como o controlador de produtos poderia ser implementado em Laravel para as operações CRUD:
phpCopy code<?php
namespace App\Http\Controllers;
use App\Product;
use Illuminate\Http\Request;
class ProductController extends Controller
{
/**
* Display a listing of the products.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$products = Product::all();
return view('products.index', compact('products'));
}
/**
* Show the form for creating a new product.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
return view('products.create');
}
/**
* Store a newly created product in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$request->validate([
'name' => 'required',
'description' => 'required',
'price' => 'required|numeric',
]);
$product = new Product([
'name' => $request->get('name'),
'description' => $request->get('description'),
'price' => $request->get('price'),
]);
$product->save();
return redirect('/products')->with('success', 'Product added successfully');
}
/**
* Show the form for editing the specified product.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
$product = Product::find($id);
return view('products.edit', compact('product'));
}
/**
* Update the specified product in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
$request->validate([
'name' => 'required',
'description' => 'required',
'price' => 'required|numeric',
]);
$product = Product::find($id);
$product->name = $request->get('name');
$product->description = $request->get('description');
$product->price = $request->get('price');
$product->save();
return redirect('/products')->with('success', 'Product updated successfully');
}
/**
* Remove the specified product from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
$product = Product::find($id);
$product->delete();
return redirect('/products')->with('success', 'Product deleted successfully');
}
}
Aqui estão as views que você precisaria criar para implementar as operações CRUD de produtos em Laravel:
- Arquivo
resources/views/products/index.blade.php
para listagem dos produtos:
lessCopy code@extends('layouts.app')
@section('content')
<div class="container">
<h1>Products</h1>
@if (session('success'))
<div class="alert alert-success">
{{ session('success') }}
</div>
@endif
<table class="table table-bordered">
<thead>
<tr>
<th>ID</th>
<th>Name</th>
<th>Description</th>
<th>Price</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
@foreach ($products as $product)
<tr>
<td>{{ $product->id }}</td>
<td>{{ $product->name }}</td>
<td>{{ $product->description }}</td>
<td>{{ $product->price }}</td>
<td>
<a href="{{ route('products.edit', $product->id) }}" class="btn btn-primary">Edit</a>
<form action="{{ route('products.destroy', $product->id) }}" method="POST" style="display: inline">
@csrf
@method('DELETE')
<button type="submit" class="btn btn-danger">Delete</button>
</form>
</td>
</tr>
@endforeach
</tbody>
</table>
<a href="{{ route('products.create') }}" class="btn btn-primary">Add Product</a>
</div>
@endsection
- Arquivo
resources/views/products/create.blade.php
para adicionar um novo produto:
lessCopy code@extends('layouts.app')
@section('content')
<div class="container">
<h1>Add Product</h1>
<form action="{{ route('products.store') }}" method="POST">
@csrf
<div class="form-group">
<label for="name">Name:</label>
<input type="text" name="name" id="name" class="form-control" required>
</div>
<div class="form-group">
<label for="description">Description:</label>
<textarea name="description" id="description" class="form-control" required></textarea>
</div>
<div class="form-group">
<label for="price">Price:</label>
<input type="text" name="price" id="price" class="form-control" required>
</div>
<button type="submit" class="btn btn-primary">Save</button>
</form>
</div>
@endsection
View edit do crud produtos em laravel
Arquivo resources/views/products/edit.blade.php
para editar um produto existente:
lessCopy code@extends('layouts.app')
@section('content')
<div class="container">
<h1>Edit Product</h1>
<form action="{{ route('products.update', $product->id) }}" method="POST">
@csrf
@method('PUT')
<div class="form-group">
<label for="name">Name:</label>
<input type="text" name="name" id="name" class="form-control" value="{{ $product->name }}" required>
</div>
<div class="form-group">
<label for="description">Description:</label>
<textarea name="description" id="description" class="form-control" required>{{ $product->description }}</textarea>
</div>
<div class="form-group">
<label for="price">Price:</label>
<input type="text" name="price" id="price" class="form-control" value="{{ $product->price }}" required>
</div>
<button type="submit" class="btn btn-primary">Save</button>
</form>
</div>
@endsection
View show do crud produtos em laravel
Arquivo resources/views/products/show.blade.php
para exibir detalhes de um produto:
phpCopy code@extends('layouts.app')
@section('content')
<div class="container">
<h1>Product Details</h1>
<table class="table table-bordered">
<tr>
<th>Name</th>
<td>{{ $product->name }}</td>
</tr>
<tr>
<th>Description</th>
<td>{{ $product->description }}</td>
</tr>
<tr>
<th>Price</th>
<td>{{ $product->price }}</td>
</tr>
</table>
<a href="{{ route('products.index') }}" class="btn btn-secondary">Back</a>
</div>
@endsection
Deixe um comentário