Visão geral do conteúdo [ ocultar ]
- 1 Visão geral do projeto Laravel crud
- 2 #Laravel 7 novos recursos
- 3 # Requisitos do servidor
- 4 # Pré-requisitos
- 5 Tutorial básico do Laravel
- 6 Etapa 1: Configurar o banco de dados MySQL
- 7 Etapa 2: Crie os arquivos de modelo e migração
- 8 Etapa 3: Criar rotas e controlador
- 9 Etapa 4: Configurar o Bootstrap 4
- 10 Etapa 5: criar as visualizações
- 11 Etapa 6: adicionar regras de validação e salvar dados
- 12 Etapa 7: Exibir os dados
- 13 Etapa 8: Criar operação de edição e atualização
- 14 Etapa 9: Criar funcionalidade de exclusão
Visão geral do projeto bruto do Laravel
- Etapa 1: Instale e configure o Laravel .
- Etapa 2: Configure o banco de dados MySQL.
- Etapa 3: Crie rotas e arquivos de migração.
- Etapa 4: crie um modelo, rota, controlador e visualize o arquivo.
- Etapa 5: configure a autoinicialização e crie as visualizações para o Laravel
- Etapa 6: exibir os dados para o frontend.
- Etapa 7: edite e atualize os dados no banco de dados.
- Etapa 8: escreva a lógica para excluir os dados do banco de dados dentro do arquivo do controlador.
#Laravel novos recursos
O Laravel 7 continua as melhorias feitas no Laravel 6 , introduzindo os seguintes recursos.
- Controle de versão semântico
- Compatibilidade com o Laravel Vapor ,
- Respostas de autorização aprimoradas,
- Middleware de trabalho,
- Coleções lazy,
- Melhorias na subconsulta,
- Extração de scaffolding de front-end para o pacote laravel/ui Composer
#Requisitos do servidor
Consulte os seguintes requisitos do servidor para executar o Laravel 7.
- PHP> = 7.2.5
- Extensão PHP BCMath
- Extensão PHP Ctype
- Extensão PHP JSON
- Extensão PHP Mbstring
- Extensão PHP OpenSSL
- Extensão PHP DOP
- Extensão PHP Tokenizer
- Extensão XML PHP
#Prerequisitos
Para este projeto bruto do Laravel, estou usando o Visual Studio Code como um editor para o meu projeto. Se você não sabe como configurar o PHP no VSCode, temos neste tutorial um tutorial perfeito sobre como configurar o Visual Studio Code For PHP Developers .
Laravel crud tutorial
Etapa 1: Configurar e instalar o Laravel
Você pode instalar o Laravel 7 via instalador global. usando o comando Composer Create-Project ou laravel new << project >>
1 - composer create-project --prefer-dist laravel/laravel armsblogAgora, vá para a pasta armsblog e crie o banco de dados no arquivo .env , em seguida vá até o diretório Providers abra o AppServiceProvider e insira o código abaixo no método boot() para evitar conflitos de limites de string ao gerar as migrates .
2 - cd ./armsblog
3 - Abra o arquivo .env e Crie o banco
4 - Abra o AppServiceProvider e insira
use Illuminate\Support\Facades\Schema;
public function boot()
{
Schema::defaultStringLength(191);
}
Etapa 2: Configurar o banco de dados MySQL
Eu criei o banco de dados MySQL chamado laraUpdate e agora escrevo as credenciais do MySQL dentro de um arquivo .env .
Antes de criar migrações, precisamos configurar o banco de dados MySQL, supondo que você saiba como criar o banco de dados usando o PHPMyAdmin.
Após criar um banco de dados, adicionaremos credenciais de banco de dados em nosso aplicativo. O Laravel tem o . arquivo de ambiente env que terá todos os dados confidenciais, como detalhes do banco de dados, detalhes do driver de correio etc.
Como não é recomendável salvar essas informações diretamente dentro de um código (os arquivos de ambiente não se limitam apenas ao PHP, eles são usados em todas as outras estruturas).
O arquivo .env é carregado dentro dos arquivos do diretório config. Um arquivo .env está localizado na raiz do nosso projeto laravel.
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laraUpdate
DB_USERNAME=root
DB_PASSWORD=""Então agora você poderá conectar um banco de dados MySQL
Etapa 3: Configurar o Bootstrap 4
No momento, existem alguns problemas ou, de alguma forma, não vejo nenhum código no arquivo públic >> css >> app.css. Eu já compilei o arquivo CSS e JS pelo comando npm run dev , mas ainda assim, o arquivo app.css transferi manualmente pois falha na compilação.
Uma solução possível é copiar o código do arquivo app.css da versão anterior do Laravel e colá-lo aqui no arquivo público >> css >> app.css público da pasta armsblog, como a seguir. Eu postei o link do arquivo css para troubleshooting 1 e 2
Agora, a segunda solução possível é essa. Esse novo scaffolding está disponível apenas no Laravel 6 e 7 e não nas versões anteriores, como o Laravel 5.8 ou 5.7.
Embora o Laravel 7 não determine quais pré-processadores JavaScript ou CSS você usa, ele fornece o ponto de partida essencial, usando o Bootstrap e o Vue, que será útil para muitos projetos.
Por padrão, o Laravel usa o NPM para instalar esses dois pacotes de front-end.
Os scaffolding Bootstrap e Vue fornecidos pelo Laravel estão localizados no pacote Composer, que você pode instalar usando o Composer através do seguinte comando:
laravel/breeze --devcomposer require laravel/breeze --devphp artisan breeze:install npm install && npm run dev
Na sequencia será mostrado a sequencia de dados processados.
Um erro muito comum no sistema windows é após o processamento do npm run dev não gerar o css do front registro e login então terá de inserir manualmente caso ocorra este erro 1-troubleshooting 2-troubleshooting.
O Laravel sempre acompanha as migrates, para que você possa gerar as tabelas no banco de dados usando o seguinte comando.
php artisan migratephp artisan serveVocê verá que três tabelas serão criadas dentro dos bancos de dados MySQL.
O php artisan serve é para checar se, até aqui está tudo bem.
O php artisan serve é para checar se, até aqui está tudo bem.
No Laravel, você vê mais uma tabela chamada create_failed_jobs_table esta tabela processo a quantidade de erros que ocorre.
Criaremos uma operação CRUD nos programas da Netflix. Assim, um usuário pode criar, ler, atualizar e excluir os programas de um banco de dados. Então, vamos criar os arquivos de models e migrates.
Etapa 4: criar os arquivos de model e migrate
Já configuramos nosso banco de dados, agora vamos ver as migrações de banco de dados. A migração é usada para salvar os detalhes sobre a tabela do banco de dados e suas propriedades, para que você não precise gerar manualmente todas as tabelas acessando a interface do banco de dados ou algo como phpmyadmin.
Podemos desenvolver as migrações usando o artesão com o comando "make: migration".
Digite o seguinte comando para criar um modelo e arquivos de migração.
php artisan make:model Show -mEm laravel, o nome de um modelo deve ser singular, e o nome da migração deve ser o plural, para que ele possa encontrar automaticamente o nome de uma tabela.
Você pode encontrar esses arquivos de migração dentro do diretório database/migrations.
O Laravel vem com três migrações, a saber, users, failed_jobs e password_resets (todos os arquivos de migração são anexados com um carimbo de data / hora), usados para autenticação.
Se você deseja criar a migração, mas tem um nome de tabela diferente em mente, é possível definir explicitamente um nome de tabela com o sinalizador “- create”.
Ele criará o arquivo Show.php e o arquivo de migração [timestamp] create_shows_table.php .
Agora, abra um arquivo de migração dentro do database >> migrations >> [timestamp] create_shows_table e adicione o seguinte esquema dentro dele. Quando você abre um table.php, você verá dois métodos, up() e down().
A função up() é usada para criar / atualizar tabelas, colunas e índices. A função down() é usada para reverter uma operação feita pelo método up().
Dentro da função up(), temos o método Schema: create ('table_name,' callback) que será usado para criar a nova tabela.
Dentro de um retorno de chamada, temos $table-> bigIncrements ('id') que criará a coluna inteira auto_increment com a chave primária e o argumento 'id' é o nome de uma coluna.
Agora, adicione as seguintes colunas.
public function up()
{
Schema::create('shows', function (Blueprint $table) {
$table->id(); $table->unsignedBIgInteger('id_usuario'); $table->foreign('id_usuario')->references('id')->on('users')->onDelete('cascade')->onUpdate('cascade'); $table->string('nome');
$table->string('genero');
$table->string('idade');
$table->string('apelido'); $table->timestamps(); }); } app/Models/User.php
public function show()
{
return $this->hasOne('App\Models\Shows','id_usuario');
}Agora, crie a tabela no banco de dados usando o seguinte comando.
php artisan migrateO comando executará as migrates e criará tabelas definidas. Ele executará a função up().
Se você precisar reverter as migrações, poderá usar o comando migrate : rollback, que executará a função down() como o php artisan migrate: rollback.
Agora, adicione a propriedade preenchível dentro do arquivo Show.php .
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Show extends Model
{
use HasFactory; protected $fillable = ['nome', 'genero', 'idade', 'apelido', 'id_usuario'];
protected $table='shows';
public function relUsers()
{
return $this->hasOne('App\Models\User','id','id_usuario');
}}
Podemos especificar todas as propriedades para modificar o comportamento do modelo.
Podemos escrever uma propriedade $table que é usada para determinar um nome da tabela com a qual este modelo irá interagir nas operações futuras.
Por padrão, ele definirá um nome de tabela como o plural do nome do modelo, por exemplo, mostra a tabela para Mostrar modelo e a tabela de usuários para o Modelo do usuário.
Quando você não precisar usar registros de data e hora em sua tabela, também precisará especificar a propriedade $timestamps e configurá-la como valor falso no seu modelo, porque o Laravel espera que sua tabela tenha as colunas de registro de data e hora created_at e updated_at.
Etapa 5: criar route e controller
Primeiro, crie o ShowController usando o seguinte comando.
php artisan make:controller ShowController --resourceObserve que também adicionamos o sinalizador - resource, que definirá seis métodos dentro do ShowController, a saber:
- Índice (usado para exibir uma lista de programas)
- Criar (mostrará a visualização com um formulário para criar um Show)
- Store (usado para criar um Show dentro do banco de dados. Nota: o método create envia para o método store)
- Show (exibirá um Show especificado)
- Editar (mostrará o formulário para editar um Show. O formulário será preenchido com os dados existentes do Show)
- Atualização (Usado para atualizar um Show dentro do banco de dados. Nota: editar os envios para o método de atualização)
- Destruir (usado para excluir um Show especificado)
Agora, dentro do arquivo routes >> web.php , adicione a seguinte linha de código.
<?phpuse App\Http\Controllers\ShowController;
Route::get('/', function () {
return view('welcome');
});
Route::resource('/shows', 'App\Http\Controllers\ShowController');Podemos passar parâmetros dinâmicos com colchetes {}, e você deve ter notado que show, update e destroy tem o mesmo URL, mas métodos diferentes, por isso é legítimo.
Assim como - flag de recurso, o laravel possui um método chamado resource() que irá gerar todas as rotas acima. Você também pode usar esse método em vez de especificá-los individualmente, como acima.
Na verdade, adicionando a seguinte linha, registramos as várias rotas para o nosso aplicativo. Podemos verificar usando o seguinte comando.
Dentro da pasta resources >> views , crie os seguintes arquivos de três views.
- create.blade.php
- edit.blade.php
- index.blade.php
Dentro da pasta views , também precisamos criar o arquivo de layout.
Portanto, crie um arquivo dentro da pasta views chamada layout.blade.php. Adicione o seguinte código dentro de um arquivo layout.blade.php .
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Laravel 7 CRUD</title>
<link href="{{ asset('css/app.css') }}" rel="stylesheet" type="text/css" />
</head>
<body>
<div class="container">
@yield('content')
</div>
<script src="{{ asset('js/app.js') }}" type="text/js"></script>
</body>
</html>Então, basicamente, este é o nosso principal arquivo de modelo, e todos os outros arquivos de exibição estenderão esse arquivo layout.blade.php.
Aqui, já incluímos o Bootstrap 4 adicionando o app.css.
O próximo passo seria codificar um arquivo create.blade.php . Portanto, escreva o seguinte código dentro dele.
@extends('layout')
@section('content')
<style>
.uper {
margin-top: 40px;
}
</style>
<div class="card uper">
<div class="card-header">
Adicionar Dados
</div>
<div class="card-body">
@if ($errors->any())
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div><br />
@endif
<form method="post" action="{{ route('shows.store') }}">
<div class="form-group">
@csrf
<label for="name">Nome:</label>
<input type="text" class="form-control" name="nome"/>
</div>
<div class="form-group">
<label for="price">Genero:</label>
<input type="text" class="form-control" name="genero"/>
</div>
<div class="form-group">
<label for="price">Idade:</label>
<input type="text" class="form-control" name="idade"/>
</div>
<div class="form-group">
<label for="quantity">Apelido:</label>
<input type="text" class="form-control" name="apelido"/>
</div>
<button type="submit" class="btn btn-primary">Registrar</button>
</form>
</div>
</div>
@endsectionOk, agora precisamos abrir o arquivo Show Controller.php e, na função create(), precisamos retornar a exibição, e esse é um arquivo create.blade.php .
// ShowController.php
public function create()
{
return view('create');
}Vá para um http://localhost: 8000/Shows/create
Você verá algo como o seguinte.
Etapa 6: adicionar regras de validação e salvar dados
Nesta etapa, adicionaremos uma validação do Laravel .
Agora, a primeira etapa dentro do ShowController.php é importar o espaço para nome do modelo Show dentro do arquivo ShowController.php .
<?php
// ShowController.php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Show;Agora, escreva o seguinte código na função store() do arquivo ShowController.php .
public function store(Request $request)
{
$validatedData = $request->validate([
'nome' => 'required|max:255',
'genero' => 'required|max:255',
'idade' => 'required|max:255',
'apelido' => 'required|max:255',
]);
$show = Show::create($validatedData);
return redirect('/shows')->with('success', 'Dado inserido com sucesso!!');
}Aqui, o que fizemos foi verificar primeiro os quatro campos do formulário.
Se os dados recebidos falharem em alguma das regras, eles irão diretamente para o formulário com as mensagens de erro.
O método Store possui o objeto $request como o parâmetro que será usado para acessar os dados do formulário.
A primeira coisa que você deseja fazer é validar uma forma de dados.
Podemos usar uma função $request-> validate() para validação, que receberá a matriz de regras de validação.
Regras de validação é uma matriz associativa.
A chave será o field_name e o valor sendo as regras de validação.
O segundo parâmetro é a matriz opcional para mensagens de validação personalizadas.
As regras são separadas com o sinal de tubulação “|.” Estamos usando as regras de validação mais básicas .
Primeiro é "obrigatório", o que significa que o field_name não deve estar vazio. (A regra “anulável” é vice-versa), “string” significa que deve ser o valor da string, “min” é o limite de caracteres mínimos para uma string em um campo de entrada e “max” é o máximo de caracteres. “Exclusivo: tabela, coluna” com veja se o mesmo valor não existe no banco de dados (é útil para armazenar emails ou qualquer outro dado exclusivo).
Se a validação falhar, ele nos redirecionará de volta. Após a validação, estamos criando um novo livro e salvá-lo no banco de dados.
Precisamos percorrer essas mensagens de erro dentro do arquivo create.blade.php que já fizemos.
Se você deixar todos os campos do formulário vazios, encontrará uma mensagem de erro como esta imagem.
Agora, se você preencher os campos do formulário corretamente, ele criará uma nova linha no banco de dados. Eu criei um novo programa.
Etapa 7: exibir os dados
Agora, precisamos escrever a função de índice ShowController para retornar uma exibição de índice com os dados buscados em um banco de dados. Escreva o seguinte código dentro da função index ().
// ShowController.php
public function index()
{
$shows = Show::all();
return view('index', compact('shows'));
}Ok, agora crie um arquivo chamado index.blade.php dentro da pasta views e adicione o seguinte código.
@extends('layout')
@section('content')
<style>
.uper {
margin-top: 40px;
}
</style>
<div class="uper">
@if(session()->get('success'))
<div class="alert alert-success">
{{ session()->get('success') }}
</div><br/>
@endif <a href="{{ route('shows.create')}}" class="btn btn-info">Inserir Registro</a>
<br><br>
<table class="table table-striped ">
<thead>
<tr>
<td>ID</td>
<td>Nome</td>
<td>Genero</td>
<td>Idade</td>
<td>Apelido</td>
<td colspan="2">Ações</td>
</tr>
</thead>
<tbody>
@foreach($shows as $show)
<tr>
<td>{{$show->id}}</td>
<td>{{$show->nome}}</td>
<td>{{$show->genero}}</td>
<td>{{$show->idade}}</td>
<td>{{$show->apelido}}</td>
<td><a href="{{ route('shows.edit', $show->id)}}" class="btn btn-primary">Editar</a></td>
<td>
<form action="{{ route('shows.destroy', $show->id)}}" method="post">
@csrf
@method('DELETE')
<button class="btn btn-danger" type="submit">Excluir</button>
</form>
</td>
</tr>
@endforeach
</tbody>
</table>
<div>
@endsectionUsamos a função PHP number_format() para imprimir o valor flutuante da classificação IMDB.
Aqui, percorremos a matriz do programa e exibimos os dados no formato de tabela.
Além disso, adicionamos dois botões para operação de edição e exclusão .
Etapa 8: Criar operação de edição e atualização
Primeiro, precisamos adicionar o seguinte trecho de código na função de edição do arquivo ShowController.php .
// ShowController.php
public function edit($id)
{
$show = Show::findOrFail($id);
return view('edit', compact('show'));
}Agora, crie o novo arquivo dentro da pasta views chamada edit.blade.php e adicione o seguinte código.
@extends('layout')
@section('content')
<style>
.uper {
margin-top: 40px;
}
</style>
<div class="card uper">
<div class="card-header">
Atualizar dados
</div>
<div class="card-body">
@if ($errors->any())
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div><br />
@endif<form method="post" action="{{ route('shows.update', $show->id) }}"> <div class="form-group">
@csrf
@method('PATCH')
<label for="name">Nome:</label>
<input type="text" class="form-control" name="nome" value="{{ $show->nome}}"/>
</div>
<div class="form-group">
<label for="price">Genero:</label>
<input type="text" class="form-control" name="genero" value="{{ $show->genero}}"/>
</div>
<div class="form-group">
<label for="price">Idade:</label>
<input type="text" class="form-control" name="idade" value="{{ $show->idade}}"/>
</div>
<div class="form-group">
<label for="quantity">Apelido:</label>
<input type="text" class="form-control" name="apelido" value="{{ $show->apelido}}"/>
</div>
<button type="submit" class="btn btn-primary">Atualizar</button>
</form>
</div>
</div>
@endsectionNesse arquivo, você pode mostrar os valores de uma linha específica usando seu ID exclusivo dentro dos campos do formulário.
Então, quando você clicar neste URL:http://localhost:8000/shows/edit, você verá algo como a imagem abaixo.
// ShowController.php
public function update(Request $request, $id)
{
$validatedData = $request->validate([
'nome' => 'required|max:255',
'genero' => 'required|max:255',
'idade' => 'required|max:255',
'apelido' => 'required|max:255',
]);
Show::whereId($id)->update($validatedData);
return redirect('/shows')->with('success', 'Dado atualizado com sucesso!');
}Portanto, agora você pode editar e atualizar todos os dados no banco de dados com sucesso.
Etapa 9: Criar funcionalidade de exclusão
Escreva o seguinte código dentro da função de destruição do ShowController .
// ShowController.php
public function destroy($id)
{
$show = Show::findOrFail($id);
$show->delete();
return redirect('/shows')->with('success', 'Dado excluído com sucesso!');
}Vá para o URL: http://localhost:8000/shows e tente remover o show.
Você pode ver que você excluiu com êxito o programa.
Portanto, nosso código ShowController.php completo é como abaixo.
<?php
// ShowController.php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Show;
class ShowController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$shows = Show::all();
return view('index', compact('shows'));
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
return view('create');
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$validatedData = $request->validate([
'nome' => 'required|max:255',
'genero' => 'required|max:255',
'idade' => 'required|max:255',
'apelido' => 'required|max:255',
]);
$show = Show::create($validatedData);
return redirect('/shows')->with('success', 'Dado inserido com sucesso!');
}
/**
* 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)
{
$show = Show::findOrFail($id);
return view('edit', compact('show'));
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
$validatedData = $request->validate([
'nome' => 'required|max:255',
'genero' => 'required|max:255',
'idade' => 'required|max:255',
'apelido' => 'required|max:255',
]);
Show::whereId($id)->update($validatedData);
return redirect('/shows')->with('success', 'Dado atualizado com sucesso!!');
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
$show = Show::findOrFail($id);
$show->delete();
return redirect('/shows')->with('success', 'Dado excluído com sucesso!!');
}
}
Portanto, concluímos um tutorial de operações do Laravel 7 CRUD com o exemplo do zero.
