Entri yang Diunggulkan
DAUR ULANG SAMPAH DIGITAL
Mari kita mulai dengan Proyek Eco dan Proyek Ocean. Proyek Eco: Mengolah Sampah Digital Menjadi Energi Proyek Eco menggunakan teknologi bloc...
BELAJAR PROGRAMMING CARA MUDAH DAN CEPAT
hidup adalah mencari kesenangan dan menyalurkan hobby berkat dari bakat dan talenta. agar betah untuk hidup di dunia. "malaikat akan menjagai orang yang sedang belajar" selama masih senang dan suka untuk belajar artinya akan dipanjangkan umurnya; bukankah begitu? sudah enggan belajar sama dengan menunggu saatnya untuk mati dan dibangkitkan kembali lain waktu entah kapan, hidup di alam kubur yang tidak kenal waktu, antara ada dan tiada.
dan belajar apa pun juga adalah praktek langsung mengikuti tutorial, tanpa perlu banyak menghafal dan baca banyak teori.
bisa adalah karena terbiasa
menjadi ahli karena banyak pengalaman gagal dan trus berusaha untuk bisa.
sudah tidak jamannya belajar dengan duduk di bangku sekolah. komersialisasi dunia pendidikan dengan dalih mencerdaskan yang justru hanya mencetak 'robot pasif' dan 'bodoh'.
internet diciptakan sebagai dunia pendidikan murah meriah. belajar bijak menyikapi internet dunia terbuka dan bebas yang selalu diikuti oleh tindakan dan pelaku kejahatan akibat uang.
dan belajar apa pun juga adalah praktek langsung mengikuti tutorial, tanpa perlu banyak menghafal dan baca banyak teori.
bisa adalah karena terbiasa
menjadi ahli karena banyak pengalaman gagal dan trus berusaha untuk bisa.
sudah tidak jamannya belajar dengan duduk di bangku sekolah. komersialisasi dunia pendidikan dengan dalih mencerdaskan yang justru hanya mencetak 'robot pasif' dan 'bodoh'.
internet diciptakan sebagai dunia pendidikan murah meriah. belajar bijak menyikapi internet dunia terbuka dan bebas yang selalu diikuti oleh tindakan dan pelaku kejahatan akibat uang.
Tampilkan postingan dengan label laravel. Tampilkan semua postingan
Tampilkan postingan dengan label laravel. Tampilkan semua postingan
MEMBUAT POST PADA LARAVEL 3.1.8
LANGSUNG LOMPAT KE TOPIK SEEDER (SETTING DULU SBB):
CONTROLLERS > POST CONTROLLER
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Post;
class PostController extends Controller
{
public function index()
{
return view('posts', [
"title" => "All Posts",
"posts" => Post::latest()->filter(request(['search', 'category', 'author']))->paginate(5)->withQueryString()
]);
}
public function show(Post $post)
{
return view('post', [
"title" => "Single Post",
"post" => $post
]);
}
}
MODELS > CATEGORY
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Category extends Model
{
use HasFactory;
protected $guarded = ['id'];
public function posts()
{
return $this->hasMany(Post::class);
}
}
MODELS > POST
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
use HasFactory;
protected $guarded = ['id'];
protected $with = ['category', 'author'];
public function scopeFilter($query, array $filters)
{
$query->when($filters['search'] ?? false, function($query, $search) {
return $query->where('title', 'like', '%' . $search . '%')
->orwhere('body', 'like', '%' . $search . '%');
});
$query->when($filters['category'] ?? false, function($query, $category) {
return $query->whereHas('category', function($query) use ($category) {
$query->where('slug', $category);
});
});
$query->when($filters['author'] ?? false, fn($query, $author) =>
$query->whereHas('author', fn($query) =>
$query->where('username', $author)
)
);
}
public function category()
{
return $this->belongsTo(Category::class);
}
public function author()
{
return $this->belongsTo(User::class, 'user_id');
}
}
MODELS > USER
<?php
namespace App\Models;
// use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens;
class User extends Authenticatable
{
use HasApiTokens, HasFactory, Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array<int, string>
*/
protected $fillable = [
'name',
'email',
'password',
];
/**
* The attributes that should be hidden for serialization.
*
* @var array<int, string>
*/
protected $hidden = [
'password',
'remember_token',
];
/**
* The attributes that should be cast.
*
* @var array<string, string>
*/
protected $casts = [
'email_verified_at' => 'datetime',
];
public function posts()
{
return $this->hasMany(Post::class);
}
}
MIGRATIONS - CATEGORIES
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('categories', function (Blueprint $table) {
$table->id();
$table->string('name')->unique();
$table->string('slug')->unique();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('categories');
}
};
MIGRATIONS - POSTS
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('posts', function (Blueprint $table) {
$table->id();
$table->foreignId('category_id');
$table->foreignId('user_id');
$table->string('title');
$table->string('slug')->unique();
$table->text('excerpt');
$table->text('body');
$table->timestamp('published_at')->nullable();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('posts');
}
};
MIGRATIONS - USERS
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
// BEGIN
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->boolean('is_admin')->default(false);
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
// END
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('users');
}
};
VIEWS > CATEGORIES
@extends('layouts.main')@extends('layouts.main')
@section('container')
@include('layouts.nav2')
<section>
<div class="container mt-5">
<h1 class=mb-5>Post Categories</h1>
@foreach ($categories as $category)
<ul>
<li>
<h2>
<a href="/categories/{{ $category->slug }}">{{ $category->name }}</a>
</h2>
</li>
</ul>
@endforeach
</div>
</section>
@endsection
VIEWS > POSTS
@extends('layouts.main')('container')
@extends('layouts.main')
@include('layouts.nav2')
@section('container')
<section>
<div class="container mt-5">
<h3>{{ $title }}</h3>
@if ($posts->count())
<div class="card mb-5">
<img src="https://source.unsplash.com/540x230?{{ $posts[0]->category->name }}" class="card-img-top" alt="{{ $posts[0]->category->name }}">
<div class="card-body">
<h1 class="card-title"><a href="/posts/{{ $posts[0]->slug }}" class="text-decoration-none text-dark"> {{ $posts[0]->title }}</a></h1>
<p>By: <a href="/posts?author={{ $posts[0]->author->username }}" class="text-decoration-none">{{ $posts[0]->author->name }}</a> in <a href="/posts?category={{ $posts[0]->category->slug }}" class="text-decoration-none">{{ $posts[0]->category->name }}</a></p>
<p class="card-text">{{ $posts[0]->excerpt }}</p>
<p class="card-text"><small class="text-muted">Last updated {{ $posts[0]->created_at->diffForHumans() }}</small></p>
<a href="/posts/{{ $posts[0]->slug }}" class="text-decoration-none btn btn-primary">Read More</a>
</div>
</div>
<div class="container">
<div class="row">
@foreach ($posts->skip(1) as $post)
<div class="col-md-6 mb-5">
<div class="card">
<img src="https://source.unsplash.com/540x330?{{ $post->category->name }}" class="card-img-top" alt="{{ $post->category->name }}">
<div class="card-body">
<h1 class="card-title"><a href="/posts/{{ $post->slug }}" class="text-decoration-none text-dark">{{ $post->title }}</a></h1>
<p>By: <a href="/posts?author={{ $post->author->username }}" class="text-decoration-none">{{ $post->author->name }}</a><br>in <small class="text-muted"><a href="/posts?category={{ $post->category->slug }}" class="text-decoration-none">{{ $post->category->name }}</a></p><p> Last updated {{ $post->created_at->diffForHumans() }}</small></p>
<p class="card-text">{{ $post->excerpt }}</p>
<a href="/posts/{{ $post->slug }}" class="text-decoration-none btn btn-primary">Read More</a>
</div>
</div>
</div>
@endforeach
</div>
</div>
{{-- @foreach ($posts->skip(1) as $post)
<article class="mt-5 border-bottom mb-5 pb-4">
<h2>
<a href="/posts/{{ $post->slug }}" class="text-decoration-none">{{ $post->title }}</a>
</h2>
<p>By: <a href="/author/{{ $post->author->username }}" class="text-decoration-none">{{ $post->author->name }}</a> in <a href="/categories/{{ $post->category->slug }}" class="text-decoration-none">{{ $post->category->name }}</a></p>
<p>{{ $post->excerpt }}</p>
<a href="/posts/{{ $post->slug }}" class="text-decoration-none">Read More.</a>
</article>
@endforeach --}}
</div>
</section>
@else
<p class="text-center mt-5 fs-1">404<br class="fs-2">- File Not Found</p>
@endif
{{ $posts->links() }}
@endsection
VIEWS > POST
@extends('layouts.main')@extends('layouts.main')
@include('Layouts.nav2')
@section('container')
<section>
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<h3 class="mt-5 mb-5">Single Post</h3>
<h1 class="mb-3">{{ $post->title }}</h1>
<p>By: <a href="/posts?author={{ $post->author->username }}" class="text-decoration-none">{{ $post->author->name }}</a> in <a href="/posts?category={{ $post->category->slug }}" class="text-decoration-none">{{ $post->category->name }}</a></p>
<img src="https://source.unsplash.com/1200x630?{{ $post->category->name }}" alt="{{ $post->category->name }}" class="img-fluid">
<article class="my-4 fs-5">
{!! $post->body !!}
</article>
<a href="/posts" class="d-block pt-4 text-decoration-none">Back To Posts</a>
</div>
</div>
</div>
{{-- <div class="container mt-5">
<h3 class="mb-5">Single Post</h3>
<h1 class="mb-5">{{ $post->title }}</h1>
<p>By: <a href="/author/{{ $post->author->username }}" class="text-decoration-none">{{ $post->author->name }}</a> in <a href="/categories/{{ $post->category->slug }}" class="text-decoration-none">{{ $post->category->name }}</a></p>
{!! $post->body !!}
<a href="/posts" class="d-block pt-4 text-decoration-none">Back To Posts</a>
</div> --}}
</section>
@endsection
ROUTES
<?php
use Illuminate\Support\Facades\Route;
use App\Models\Post;
use App\Http\Controllers\PostController;
use App\Models\Category;
use App\Models\User;
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
Route::get('/', function () {
return view('home', [
"title" => "Home"
]);
});
Route::get('/data', function () {
return view('data', [
"title" => "Data"
]);
});
Route::get('/posts', [PostController::class, 'index']);
Route::get('posts/{post:slug}', [PostController::class, 'show']);
Route::get('categories', function() {
return view('categories', [
'title' => 'Post Categories',
'categories' => Category::all()
]);
});
Route::get('categories/{category:slug}', function(Category $category) {
return view('posts', [
'title' => "Post By Category : $category->name",
'posts' => $category->posts->load('category', 'author')
]);
});
Route::get('/author/{author:username}', function(User $author) {
return view('posts', [
'title' => "Post By Author : $author->name",
'posts' => $author->posts->load('category', 'author')
]);
});
DATABASE SEEDER
<?php
namespace Database\Seeders;
// use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use App\Models\User;
use App\Models\Category;
use App\Models\Post;
*NOTES: SEBAIKNYA DIKETIK LANGSUNG BUKAN COPAS, UNTUK LATIHAN KETELITIAN DAN KECERMATAN.
UNTUK FACTORY NYUSUL.
TAMBAHKAN USERNAME PADA USER FACTORY
public function definition()
{
return [
'name' => fake()->name(),
'username' => fake()->unique()->userName(),
'email' => fake()->unique()->safeEmail(),
'email_verified_at' => now(),
'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password
'remember_token' => Str::random(10),
];
}
MENGUBAH HALAMAN PADA LARAVEL
Tampilan pertama kali ketika kita meng-install Laravel adalah seperti berikut:
Untuk mengubah halaman menjadi halaman milik kita:
Tampilan awal:
Route::get('/login', function () {
return view('login');
});
MEMBUAT TOMBOL AKTIF PADA LARAVEL
MEMBUAT TOMBOL AKTIF PADA LARAVEL
Belajar Laravel 8 | 4. Blade Templating Engine 19:19
<a class="nav-link {{ ($title === "Home") ? 'active' : '' }}" href="/">Home</a>
MENGUBAH TITLE PADA LARAVEL
MENGUBAH TITLE PADA LARAVEL
Belajar Laravel 8 | 4. Blade Templating Engine 17:36
Route::get('/', function () {
return view('home', [
"title" => "Home"
]);
});
pada main.blade.php : <title>OZX Labs | {{ $title }}</title>
MEMBUAT TOMBOL AKTIF PADA LARAVEL
Belajar Laravel 8 | 4. Blade Templating Engine 19:19
<a class="nav-link {{ ($title === "Home") ? 'active' : '' }}" href="/">Home</a>
Tampilan pertama kali ketika kita meng-install Laravel adalah seperti berikut:
Untuk mengubah halaman menjadi halaman milik kita:
Tampilan awal:
Route::get('/login', function () {
return view('login');
});
Postingan Populer
-
MEMBUAT POST PADA LARAVEL 3.1.8 LANGSUNG LOMPAT KE TOPIK SEEDER (SETTING DULU SBB): CONTROLLERS > POST CONTROLLER <?php namespace App...
-
MEMBUAT TOMBOL AKTIF PADA LARAVEL Belajar Laravel 8 | 4. Blade Templating Engine 19:19 < a class = "nav-link {{ ( $title === ...
-
MENGUBAH TITLE PADA LARAVEL Belajar Laravel 8 | 4. Blade Templating Engine 17:36 Route :: get ( '/' , function () { return vie...
-
Lorem ipsum, dolor sit amet consectetur adipisicing elit. Ratione illo molestiae unde aperiam, dolor cumque! Porro illo iste, aperiam q...
-
Document Tombol dengan Ikon: Kamu bisa menambahkan ikon ke dalam tombol menggunakan elemen atau SVG agar lebi...
-
Tampilan pertama kali ketika kita meng-install Laravel adalah seperti berikut: Untuk mengubah halaman menjadi halaman milik kita: Tampilan a...
-
https://www.youtube.com/c/kawankoding https://www.youtube.com/c/ReJourney https://www.youtube.com/c/SekolahKoding https://www.youtube.com/c...
-
CARANYA : XXX MENDAFTAR DOMAIN : ***
-
bantu saya membuat halaman login menu di laravel Berikut adalah langkah-langkah untuk membuat halaman login menggunakan Laravel. Kita akan m...