This is default featured slide 1 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.This theme is Bloggerized by Lasantha Bandara - Premiumbloggertemplates.com.

This is default featured slide 2 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.This theme is Bloggerized by Lasantha Bandara - Premiumbloggertemplates.com.

This is default featured slide 3 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.This theme is Bloggerized by Lasantha Bandara - Premiumbloggertemplates.com.

This is default featured slide 4 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.This theme is Bloggerized by Lasantha Bandara - Premiumbloggertemplates.com.

This is default featured slide 5 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.This theme is Bloggerized by Lasantha Bandara - Premiumbloggertemplates.com.

Entri yang Diunggulkan

SQL WORKBENCH

  Kalau mau pakai SQL langsung, ini contoh: sql Salin Edit CREATE DATABASE gloriabank; USE gloriabank; CREATE TABLE users ( id BIG...

Tampilkan postingan dengan label laravel. Tampilkan semua postingan
Tampilkan postingan dengan label laravel. Tampilkan semua postingan

MEMBUAT POST PADA LARAVEL 3.1.8

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

BINTANG JATUH LYRAEA

MG86

I S I itu PENTING bukan hanya ESSENSI

BINGUNG GUE , . . .

Powered By Blogger