pengantar
Panduan memulai cepat ini memberikan pengenalan dasar tentang framework Laravel dan mencakup konten tentang migrasi database, ORM yang Eloquent, perutean, validasi, tampilan, dan template Blade. Ini adalah titik awal yang bagus jika Anda baru mengenal framework Laravel atau framework PHP secara umum. Jika Anda telah menggunakan Laravel atau kerangka kerja PHP lainnya, Anda mungkin ingin melihat salah satu panduan memulai kami yang lebih canggih.
Untuk mengambil contoh pilihan dasar fitur Laravel, kita akan membuat daftar tugas sederhana yang dapat kita gunakan untuk melacak semua tugas yang ingin kita selesaikan (contoh "daftar tugas" yang khas). Kode sumber yang lengkap dan selesai untuk proyek ini tersedia di GitHub .
Instalasi
Tentu saja, pertama-tama Anda memerlukan instalasi baru dari framework Laravel. Anda dapat menggunakan mesin virtual Homestead atau lingkungan PHP lokal pilihan Anda untuk menjalankan kerangka kerja. Setelah lingkungan lokal Anda siap, Anda dapat menginstal framework Laravel menggunakan Composer:
composer create-project laravel/laravel quickstart --prefer-distAnda bebas untuk terus membaca sisa panduan mulai cepat ini; namun, jika Anda ingin mendownload kode sumber untuk panduan memulai ini dan menjalankannya di komputer lokal Anda, Anda dapat mengkloning repositori Git dan menginstal dependensinya:
git clone https://github.com/laravel/quickstart-basic quickstart
cd quickstart
composer install
php artisan migrateUntuk dokumentasi yang lebih lengkap tentang membangun lingkungan pengembangan Laravel lokal, lihat dokumentasi lengkap Homestead dan instalasi .
Mempersiapkan Database
Migrasi Database
Pertama, mari kita gunakan migrasi untuk menentukan tabel database untuk menampung semua tugas kita. Migrasi database Laravel menyediakan cara mudah untuk menentukan struktur tabel database Anda dan modifikasi menggunakan kode PHP yang lancar dan ekspresif. Alih-alih memberi tahu anggota tim Anda untuk menambahkan kolom secara manual ke salinan lokal database mereka, rekan tim Anda dapat dengan mudah menjalankan migrasi yang Anda dorong ke dalam kontrol sumber.
Jadi, mari kita buat tabel database yang akan menampung semua tugas kita. The Artisan CLI dapat digunakan untuk menghasilkan berbagai kelas dan akan menghemat banyak mengetik seperti yang Anda membangun proyek-proyek LARAVEL Anda. Dalam kasus ini, mari gunakan perintah untuk menghasilkan migrasi database baru untuk tabel kita :make:migrationtasks
php artisan make:migration create_tasks_table --create=tasksMigrasi akan ditempatkan di direktori proyek Anda. Seperti yang mungkin Anda ketahui, perintah tersebut telah menambahkan ID dan stempel waktu yang bertambah otomatis ke file migrasi. Mari edit file ini dan tambahkan kolom tambahan untuk nama tugas kita:database/migrationsmake:migrationstring
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateTasksTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('tasks', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('tasks');
}
}Untuk menjalankan migrasi kita, kita akan menggunakan migrateperintah Artisan. Jika Anda menggunakan Homestead, Anda harus menjalankan perintah ini dari dalam mesin virtual Anda, karena mesin host Anda tidak akan memiliki akses langsung ke database:
php artisan migratePerintah ini akan membuat semua tabel database kita. Jika Anda memeriksa tabel database menggunakan klien database pilihan Anda, Anda akan melihat taskstabel baru yang berisi kolom yang ditentukan dalam migrasi kami. Selanjutnya, kami siap untuk mendefinisikan model ORM yang fasih untuk tugas kami!
Model Fasih
Eloquent adalah ORM default Laravel (pemeta relasional objek). Eloquent membuatnya mudah untuk mengambil dan menyimpan data dalam database Anda menggunakan "model" yang didefinisikan dengan jelas. Biasanya, setiap model Eloquent berhubungan langsung dengan tabel database tunggal.
Jadi, mari kita tentukan Taskmodel yang sesuai dengan taskstabel database yang baru saja kita buat. Sekali lagi, kita dapat menggunakan perintah Artisan untuk menghasilkan model ini. Dalam hal ini, kami akan menggunakan perintah:make:model
php artisan make:model TaskModel tersebut akan ditempatkan di appdirektori aplikasi Anda. Secara default, kelas model kosong. Kita tidak harus secara eksplisit memberi tahu model Eloquent tabel mana yang sesuai karena akan mengasumsikan tabel database adalah bentuk jamak dari nama model. Jadi, dalam hal ini, Taskmodel diasumsikan sesuai dengan taskstabel database. Seperti inilah model kosong kita seharusnya:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Task extends Model
{
//
}Kita akan mempelajari lebih lanjut tentang bagaimana menggunakan model Eloquent saat kita menambahkan rute ke aplikasi kita. Tentu saja, silakan berkonsultasi dengan dokumentasi Eloquent lengkap untuk informasi lebih lanjut.
Rute
Menonaktifkan Rute
Selanjutnya, kami siap menambahkan beberapa rute ke aplikasi kami. Rute digunakan untuk mengarahkan URL ke pengontrol atau fungsi anonim yang harus dijalankan saat pengguna mengakses halaman tertentu. Secara default, semua rute Laravel ditentukan dalam file yang disertakan dalam setiap proyek baru.app/Http/routes.php
Untuk aplikasi ini, kita tahu kita memerlukan setidaknya tiga rute: rute untuk menampilkan daftar semua tugas kita, rute untuk menambahkan tugas baru, dan rute untuk menghapus tugas yang ada. Jadi, mari kita hentikan semua rute ini di file:app/Http/routes.php
<?php
use App\Task;
use Illuminate\Http\Request;
/**
* Display All Tasks
*/
Route::get('/', function () {
//
});
/**
* Add A New Task
*/
Route::post('/task', function (Request $request) {
//
});
/**
* Delete An Existing Task
*/
Route::delete('/task/{id}', function ($id) {
//
});Menampilkan A View
Selanjutnya, mari kita isi /rute kita . Dari rute ini, kami ingin merender template HTML yang berisi formulir untuk menambahkan tugas baru, serta daftar semua tugas saat ini.
Di Laravel, semua template HTML disimpan di direktori, dan kita dapat menggunakan helper untuk mengembalikan salah satu template ini dari rute kita:resources/viewsview
Route::get('/', function () {
return view('tasks');
});Tentu saja, kita perlu mendefinisikan tampilan ini, jadi mari kita lakukan sekarang!
Membangun Tata Letak & Tampilan
Aplikasi ini hanya memiliki satu tampilan yang berisi formulir untuk menambahkan tugas baru serta daftar semua tugas saat ini. Untuk membantu Anda memvisualisasikan tampilan, berikut adalah tangkapan layar dari aplikasi yang sudah selesai dengan gaya CSS Bootstrap dasar yang diterapkan:

Mendefinisikan Tata Letak
Hampir semua aplikasi web berbagi tata letak yang sama di seluruh halaman. Misalnya, aplikasi ini memiliki bilah navigasi atas yang biasanya ada di setiap halaman (jika kami memiliki lebih dari satu). Laravel memudahkan untuk membagikan fitur umum ini di setiap halaman menggunakan tata letak Blade .
Seperti yang kita bahas sebelumnya, semua tampilan Laravel disimpan di . Jadi, mari kita tentukan tampilan layout baru di . The ekstensi menginstruksikan kerangka untuk menggunakan mesin template pisau untuk membuat tampilan. Tentu saja, Anda dapat menggunakan template PHP biasa dengan Laravel. Namun demikian, Blade menyediakan jalan pintas yang nyaman untuk menulis template yang lebih rapi dan ringkas.resources/viewsresources/views/layouts/app.blade.php.blade.php
Tampilan kita akan terlihat seperti berikut:app.blade.php
// resources/views/layouts/app.blade.php
<!DOCTYPE html>
<html lang="en">
<head>
<title>Laravel Quickstart - Basic</title>
<!-- CSS And JavaScript -->
</head>
<body>
<div class="container">
<nav class="navbar navbar-default">
<!-- Navbar Contents -->
</nav>
</div>
@yield('content')
</body>
</html>Perhatikan porsi tata letaknya. Ini adalah petunjuk Blade khusus yang menentukan di mana semua halaman turunan yang memperluas tata letak dapat memasukkan kontennya sendiri. Selanjutnya, mari tentukan tampilan anak yang akan menggunakan tata letak ini dan menyediakan konten utamanya.@yield('content')
Mendefinisikan Pandangan Anak
Bagus, tata letak aplikasi kita sudah selesai. Selanjutnya, kita perlu mendefinisikan tampilan yang berisi formulir untuk membuat tugas baru serta tabel yang mencantumkan semua tugas yang ada. Mari kita definisikan tampilan ini di .resources/views/tasks.blade.php
Kami akan melewatkan beberapa boilerplate CSS Bootstrap dan hanya fokus pada hal-hal yang penting. Ingat, Anda dapat mengunduh sumber lengkap untuk aplikasi ini di GitHub :
// resources/views/tasks.blade.php
@extends('layouts.app')
@section('content')
<!-- Bootstrap Boilerplate... -->
<div class="panel-body">
<!-- Display Validation Errors -->
@include('common.errors')
<!-- New Task Form -->
<form action="/task" method="POST" class="form-horizontal">
{{ csrf_field() }}
<!-- Task Name -->
<div class="form-group">
<label for="task" class="col-sm-3 control-label">Task</label>
<div class="col-sm-6">
<input type="text" name="name" id="task-name" class="form-control">
</div>
</div>
<!-- Add Task Button -->
<div class="form-group">
<div class="col-sm-offset-3 col-sm-6">
<button type="submit" class="btn btn-default">
<i class="fa fa-plus"></i> Add Task
</button>
</div>
</div>
</form>
</div>
<!-- TODO: Current Tasks -->
@endsectionBeberapa Catatan Penjelasan
Sebelum melanjutkan, mari kita bicara sedikit tentang template ini. Pertama, direktif memberi tahu Blade bahwa kita menggunakan tata letak yang kita tentukan . Semua konten di antara dan akan dimasukkan ke dalam lokasi direktif dalam tata letak.@extendsresources/views/layouts/app.blade.php@section('content')@endsection@yield('content')app.blade.php
Sekarang kami telah menentukan tata letak dan tampilan dasar untuk aplikasi kami. Ingat, kami mengembalikan tampilan ini dari /rute kami seperti:
Route::get('/', function () {
return view('tasks');
});Selanjutnya, kami siap menambahkan kode ke rute kami untuk menangani input formulir yang masuk dan menambahkan tugas baru ke database.POST /task
Catatan: The direktif akan memuat template yang terletak di . Kami belum menentukan template ini, tapi kami akan segera!
@include('common.errors')resources/views/common/errors.blade.php
Menambahkan Tugas
Validasi
Sekarang kita memiliki formulir dalam tampilan kita, kita perlu menambahkan kode ke rute kita untuk memvalidasi masukan formulir yang masuk dan membuat tugas baru. Pertama, mari kita validasi inputnya.POST /task
Untuk formulir ini, kami akan membuat namebidang wajib diisi dan menyatakan harus berisi kurang dari 255karakter. Jika validasi gagal, kami akan mengarahkan kembali pengguna ke /URL, serta mem-flash input lama dan kesalahan ke dalam sesi :
Route::post('/task', function (Request $request) {
$validator = Validator::make($request->all(), [
'name' => 'required|max:255',
]);
if ($validator->fails()) {
return redirect('/')
->withInput()
->withErrors($validator);
}
// Create The Task...
});The $errorsVariabel
Mari kita istirahat sejenak untuk membahas porsi contoh ini. The panggilan akan berkedip kesalahan dari contoh validator diberikan ke sesi sehingga mereka dapat diakses melalui variabel dalam pandangan kami.->withErrors($validator)->withErrors($validator)$errors
Ingatlah bahwa kami menggunakan direktif dalam pandangan kami untuk membuat kesalahan validasi formulir. Ini akan memungkinkan kami untuk dengan mudah menampilkan kesalahan validasi dalam format yang sama di semua halaman kami. Mari tentukan konten tampilan ini sekarang:@include('common.errors')common.errors
// resources/views/common/errors.blade.php
@if (count($errors) > 0)
<!-- Form Error List -->
<div class="alert alert-danger">
<strong>Whoops! Something went wrong!</strong>
<br><br>
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endifCatatan: The
$errorsvariabel tersedia dalam setiap tampilan LARAVEL. Ini hanya akan menjadi contoh kosongViewErrorBagjika tidak ada kesalahan validasi.
Membuat Tugas
Sekarang setelah validasi input ditangani, mari kita buat tugas baru dengan terus mengisi rute kita. Setelah tugas baru dibuat, kami akan mengarahkan pengguna kembali ke /URL. Untuk membuat tugas, kita dapat menggunakan savemetode setelah membuat dan mengatur properti pada model Eloquent baru:
Route::post('/task', function (Request $request) {
$validator = Validator::make($request->all(), [
'name' => 'required|max:255',
]);
if ($validator->fails()) {
return redirect('/')
->withInput()
->withErrors($validator);
}
$task = new Task;
$task->name = $request->name;
$task->save();
return redirect('/');
});Bagus! Sekarang kami berhasil membuat tugas. Selanjutnya, mari terus menambahkan ke tampilan kita dengan membuat daftar semua tugas yang ada.
Menampilkan Tugas yang Ada
Pertama, kita perlu mengedit /rute untuk meneruskan semua tugas yang ada ke tampilan. The viewFungsi menerima argumen kedua yang merupakan array data yang akan dibuat tersedia untuk tampilan, di mana setiap tombol dalam array akan menjadi variabel dalam pandangan:
Route::get('/', function () {
$tasks = Task::orderBy('created_at', 'asc')->get();
return view('tasks', [
'tasks' => $tasks
]);
});Setelah data dilewatkan, kita dapat menjalankan tugas dalam tampilan kita dan menampilkannya dalam tabel. The Pisau membangun memungkinkan kita untuk loop menulis ringkas yang mengkompilasi ke dalam terik kode PHP cepat polos:tasks.blade.php@foreach
@extends('layouts.app')
@section('content')
<!-- Create Task Form... -->
<!-- Current Tasks -->
@if (count($tasks) > 0)
<div class="panel panel-default">
<div class="panel-heading">
Current Tasks
</div>
<div class="panel-body">
<table class="table table-striped task-table">
<!-- Table Headings -->
<thead>
<th>Task</th>
<th> </th>
</thead>
<!-- Table Body -->
<tbody>
@foreach ($tasks as $task)
<tr>
<!-- Task Name -->
<td class="table-text">
<div>{{ $task->name }}</div>
</td>
<td>
<!-- TODO: Delete Button -->
</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
@endif
@endsectionAplikasi tugas kita hampir selesai. Tapi, kami tidak memiliki cara untuk menghapus tugas yang ada saat selesai. Mari tambahkan itu selanjutnya!
Menghapus Tugas
Menambahkan Tombol Hapus
Kami meninggalkan catatan "TODO" di kode kami di mana tombol hapus kami seharusnya. Jadi, mari tambahkan tombol hapus ke setiap baris daftar tugas kita dalam tampilan. Kami akan membuat formulir satu tombol kecil untuk setiap tugas dalam daftar. Ketika tombol diklik, permintaan akan dikirim ke aplikasi:tasks.blade.phpDELETE /task
<tr>
<!-- Task Name -->
<td class="table-text">
<div>{{ $task->name }}</div>
</td>
<!-- Delete Button -->
<td>
<form action="/task/{{ $task->id }}" method="POST">
{{ csrf_field() }}
{{ method_field('DELETE') }}
<button>Delete Task</button>
</form>
</td>
</tr>Catatan Tentang Metode Spoofing
Perhatikan bahwa formulir tombol hapus methodterdaftar sebagai POST, meskipun kami menanggapi permintaan menggunakan rute. Formulir HTML hanya mengizinkan verba dan HTTP, jadi kami memerlukan cara untuk memalsukan permintaan dari formulir.Route::deleteGETPOSTDELETE
Kita dapat memalsukan DELETEpermintaan dengan mengeluarkan hasil fungsi dalam formulir kita. Fungsi ini menghasilkan input formulir tersembunyi yang dikenali Laravel dan akan digunakan untuk mengganti metode permintaan HTTP yang sebenarnya. Bidang yang dihasilkan akan terlihat seperti berikut:method_field('DELETE')
<input type="hidden" name="_method" value="DELETE">Menghapus Tugas
Terakhir, mari tambahkan logika ke rute kita untuk benar-benar menghapus tugas yang diberikan. Kita bisa menggunakan findOrFailmetode Eloquent untuk mengambil model dengan ID atau melempar pengecualian 404 jika model tidak ada. Setelah kami mengambil modelnya, kami akan menggunakan deletemetode untuk menghapus record. Setelah record dihapus, kami akan mengarahkan kembali pengguna ke /URL:
Route::delete('/task/{id}', function ($id) {
Task::findOrFail($id)->delete();
return redirect('/');
});
Comments
Post a Comment