Apa aja sih yang baru? ​
Setiap perubahan itu pasti ada dan wajar, jadi kami harap kamu dapat menerima perubahan ini yaa.
Perubahan dengan versi terbau ​
Minimal Laravel 11.x
Karena Laravel 11.x berbeda secara signifikan dari versi sebelumnya, jadi kami memutuskan untuk menghentikan dukungan untuk Laravel 10. Versi terendah yang didukung saat ini adalah Laravel 11
Memperbarui beberapa pustaka yang dibutuhkan:
Dan yang dibutuhkan untuk proses pengembangan:
Menghapus (opsional)
App\Generators\GeneratorUtils
kelas dan melakukan perubahan pada helper kelas, Disini untuk lebih lanjutMemperbaiki Bug dan Error
Untuk daftar perubahan terbaru dan lebih lengkap, silakan kunjungi GitHub Rilis
Cara memperbarui ​
Jika kamu masih menggunakan Laravel 10.x, harap pertimbangkan untuk membaca Panduan peningkatan Laravel 11.x
Ubah pustaka berikut pada
composer.json
json"require": { "laravel/framework": "^11.0", }, "require-dev": { "nunomaduro/collision": "^8.1", "evdigiina/generator": "^0.3.0", }
Opsional, jika kamu menggunakannya
"require": {
"spatie/laravel-permission": "^6.0",
"laravel/fortify": "^1.21"
},
Lalu jalankan perintah berikut
composer update
Publikasikan berkas terbaru
shphp artisan generator:publish-utils
Tambahkan kode berikut pada
resources/views/layouts/sidebar.blade.php
blade<ul class="menu"> {{-- New code --}} @auth <li class="sidebar-item{{ request()->is('/') || request()->is('dashboard') ? ' active' : '' }}"> <a class="sidebar-link" href="/"> <i class="bi bi-speedometer"></i> <span> {{ __('Dashboard') }}</span> </a> </li> @endauth {{-- Your sidebar code --}} @foreach (config('generator.sidebars') as $sidebar) {{-- ... --}} @endforeach {{-- New code --}} @if (env('APP_ENV') === 'local') <li class="sidebar-title">{{ __('Generators') }}</li> <li class="sidebar-item{{ request()->is('generators/create') ? ' active' : '' }}"> <a class="sidebar-link" href="{{ route('generators.create') }}"> <i class="bi bi-fire"></i> <span>{{ __('CRUD Generator') }}</span> </a> </li> <li class="sidebar-item{{ request()->is('api-generators/create') ? ' active' : '' }}"> <a class="sidebar-link" href="/api-generators/create"> <i class="bi bi-rocket"></i> <span>{{ __('API CRUD Generator') }}</span> </a> </li> <li class="sidebar-item{{ request()->is('simple-generators/create') ? ' active' : '' }}"> <a class="sidebar-link" href="/simple-generators/create"> <i class="bi bi-droplet"></i> <span>{{ __('Simple CRUD Generator') }}</span> </a> </li> @endif {{-- New code --}} @auth <li class="sidebar-title">Account</li> <li class="sidebar-item{{ request()->is('profile') ? ' active' : '' }}"> <a class="sidebar-link" href="{{ route('profile') }}"> <i class="bi bi-person-badge-fill"></i> <span>{{ __('Profile') }}</span> </a> </li> <li class="sidebar-item"> <a class="sidebar-link" href="{{ route('logout') }}" onclick="event.preventDefault(); document.getElementById('logout-form').submit();"> <i class="bi bi-door-open-fill"></i> <span>{{ __('Logout') }}</span> </a> <form id="logout-form" action="{{ route('logout') }}" method="POST" class="d-none"> @csrf </form> </li> @endauth </ul>
Ubah kode pada
resources/views/layouts/header.blade.php
menjadi seperti dibawah iniblade<div class="collapse navbar-collapse" id="navbarSupportedContent"> <ul class="navbar-nav ms-auto mb-lg-0"> {{-- Your code --}} </ul> {{-- New code --}} @auth <div class="dropdown"> <a href="#" data-bs-toggle="dropdown" aria-expanded="false"> <div class="user-menu d-flex"> <div class="user-name text-end me-3"> <h6 class="mb-0 text-gray-600">{{ auth()?->user()?->name }}</h6> <p class="mb-0 text-sm text-gray-600"> {{ isset(auth()?->user()?->roles) ? implode(auth()?->user()?->roles?->map(fn ($role) => $role->name)->toArray()) : '-' }} </p> </div> <div class="user-img d-flex align-items-center"> <div class="avatar avatar-md"> @if (auth()?->user()?->avatar == null) <img src="https://www.gravatar.com/avatar/{{ md5(strtolower(trim(auth()?->user()?->email))) }}&s=500" alt="Avatar"> @else <img src="{{ asset('storage/uploads/avatars/' . auth()?->user()?->avatar) }}" alt="Avatar"> @endif </div> </div> </div> </a> <ul class="dropdown-menu dropdown-menu-end" aria-labelledby="dropdownMenuButton" style="min-width: 11rem;"> <li> <h6 class="dropdown-header">{{ __('Hello') }}, {{ auth()?->user()?->name }}!</h6> </li> <li> <a class="dropdown-item" href="{{ route('profile') }}"><i class="icon-mid bi bi-person-fill me-2"></i>{{ __('My Profile') }}</a> </li> <li> <a class="dropdown-item" href="{{ route('logout') }}" onclick="event.preventDefault();document.getElementById('logout-form-nav').submit();"> <i class="bi bi-door-open-fill"></i> {{ __('Logout') }} </a> <form id="logout-form-nav" action="{{ route('logout') }}" method="POST" class="d-none"> @csrf </form> </li> </ul> </div> @endauth </div>
Buat file
generator.cache
di folderstorage
lalu copy kode di bawah inijson{ "simple_version_publish_count": 0, "full_version_publish_count": 1 }
INFO
Ubah simple_version_publish_count
atau full_version_publish_count
menjadi 1
sesuaikan dengan versi yang kamu gunakan
Ubah
config/generator.php
dariimage.path
menjadiimage.disk
php"image" => [ /** * Path for store the image. * * available options: * 1. public * 2. storage */ "path" => "storage", ]
php"image" => [ /** * Image storage location * * Available options: * 1. public * 2. storage * 3. S3 */ "disk" => "storage", // ... another configuration ]
Untuk informasi tambahan tentang perubahan ini, buka di sini
Jika kamu mendapation masalah berikut setelah membuat modul baru, silakan baca dokumentasi mengenai Middleware Laravel 11 baru di Controller di sini
Jika kamu tidak memerlukan Middleware, cukup hapus komentar pada kode tersebut atau gunakan gaya Middleware Laravel 10 di bawah ini.
php// comment code below public static function middleware(): array { return [ // 'auth', // TODO: uncomment this code if you are using spatie permission // new Middleware('permission:permission_name view', only: ['index', 'show']), // new Middleware('permission:permission_name create', only: ['create', 'store']), // new Middleware('permission:permission_name edit', only: ['edit', 'update']), // new Middleware('permission:permission_name delete', only: ['destroy']), ]; }
Ubah menjadi Laravel 10 Middleware seperti di bawah ini
phppublic function __construct() { $this->middleware('permission:permission_name view')->only('index', 'show'); $this->middleware('permission:permission_name create')->only('create', 'store'); $this->middleware('permission:permission_name edit')->only('edit', 'update'); $this->middleware('permission:permission_name delete')->only('destroy'); }
Dari
phpuse Illuminate\Routing\Controllers\{HasMiddleware, Middleware}; class YourController extends Controller implements HasMiddleware { //... }
Menjadi
php// use Illuminate\Routing\Controllers\{HasMiddleware, Middleware}; class YourController extends Controller { //... }
Jangan lupa hapus atau berikan komentar pada kode
use Illuminate\Routing\Controllers\{HasMiddleware, Middleware};
Fitur Terbaru 🔥 ​
Fitur terbaru yang ditambahkan pada versi Generator ^0.3.x:
(beta) Generator dapat membuat kelas Seeder dan Factory
(beta) CRUD API Generator 🚀
Sekarang kamu dapat membuat API yang cepat dan mudah menggunakan CRUD API Generator
Single Form
Buat CRU
Ddalam satu halaman dan Form. Fitur ini ideal untuk membuat halaman seperti pengaturan, profil web, dan fitur lainnya yang hanya memiliki 1 data saja.Menambahkan kelas terbaru ImageService
Kelas ini digunakan untuk melakukan unggah gambar dan manipulasi gambar menggunakan Intervention Image
Menambahkan opsi baru ke konfigurasi
generator.image.disk
, yang sebelumnya adalahgenerator.image.path
, kini kamu dapat menggunakan opsipublic
,storage
ataus3
. Berikut ini contohnya
"image" => [
/**
* Image storage location
*
* Available options:
* 1. public
* 2. storage
* 3. S3
*
* change path to disk
*/
"disk" => "storage",
// other configuration codes.
]
Untuk menggunakan opsi s3
, kamu harus membaca dokumentasi terkait di sini
Dan jika kamu menggunakan opsi storage
, pastikan kamu menjalankan perintah berikut
php artisan storage:link
Jika ingin melihat konfigurasi terbarunya ada di bawah ini yaa:
return [
/**
* If any input file(image) as default will use options below.
*/
"image" => [
/**
* Image storage location
*
* Available options:
* 1. public
* 2. storage
* 3. S3
*
* change path to disk
*/
"disk" => "storage",
/**
* Will be used if image is nullable and default value is null.
*/
"default" => "https://via.placeholder.com/350?text=No+Image+Avaiable",
/**
* Crop the uploaded image using intervention image.
*/
"crop" => true,
/**
* When set to true the uploaded image aspect ratio will still original.
*/
"aspect_ratio" => true,
/**
* Crop image size.
*/
"width" => 500,
"height" => 500,
],
"format" => [
/**
* Will be used to first year on select, if any column type year.
*/
"first_year" => 1970,
/**
* If any date column type will cast and display used this format, but for input date still will used Y-m-d format.
*
* another most common format:
* - M d Y
* - d F Y
* - Y m d
*/
"date" => "Y-m-d",
/**
* If any input type month will cast and display used this format.
*/
"month" => "Y/m",
/**
* If any input type time will cast and display used this format.
*/
"time" => "H:i",
/**
* If any datetime column type or datetime-local on input, will cast and display used this format.
*/
"datetime" => "Y-m-d H:i:s",
/**
* Limit string on index view for any column type text or long text.
*/
"limit_text" => 100,
],
/**
* It will be used for generator to manage and showing menus on sidebar views.
*
* Example:
* [
* 'header' => 'Main',
*
* // All permissions in menus[] and submenus[]
* 'permissions' => ['test view'],
*
* menus' => [
* [
* 'title' => 'Main Data',
* 'icon' => '<i class="bi bi-collection-fill"></i>',
* 'route' => null,
*
* // permission always null when isset submenus
* 'permission' => null,
*
* // All permissions on submenus[] and will empty[] when submenus equals to []
* 'permissions' => ['test view'],
*
* 'submenus' => [
* [
* 'title' => 'Tests',
* 'route' => '/tests',
* 'permission' => 'test view'
* ]
* ],
* ],
* ],
* ],
*
* This code below always changes when you use a generator, and maybe you must format the code.
*/
"sidebars" => [
[
"header" => "Main",
"permissions" => ["test view"],
"menus" => [
[
"title" => "Main Data",
"icon" => '<i class="bi bi-collection-fill"></i>',
"route" => null,
"permission" => null,
"permissions" => ["test view"],
"submenus" => [
[
"title" => "Tests",
"route" => "/tests",
"permission" => "test view",
],
],
],
],
],
[
"header" => "Users",
"permissions" => ["user view", "role & permission view"],
"menus" => [
[
"title" => "Users",
"icon" => '<i class="bi bi-people-fill"></i>',
"route" => "/users",
"permission" => "user view",
"permissions" => [],
"submenus" => [],
],
[
"title" => "Roles & permissions",
"icon" => '<i class="bi bi-person-check-fill"></i>',
"route" => "/roles",
"permission" => "role & permission view",
"permissions" => [],
"submenus" => [],
],
],
],
],
];