<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\DynamicField;
class DynamicFieldController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index()
{
$fields = DynamicField::orderBy('order')->get();
return view('admin.dynamic-fields.index', compact('fields'));
}
/**
* Show the form for creating a new resource.
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*/
public function store(Request $request)
{
$request->validate([
'label' => 'required',
'name' => 'required|alpha_dash',
'type' => 'required|in:text,textarea,image'
]);
DynamicField::create($request->only(['label', 'name', 'type']));
return back()->with('success', 'Thêm trường thành công');
}
/**
* Display the specified resource.
*/
public function show(string $id)
{
//
}
/**
* Show the form for editing the specified resource.
*/
public function edit(string $id)
{
//
}
/**
* Update the specified resource in storage.
*/
public function update(Request $request, string $id)
{
//
}
public function updateOrder(Request $request)
{
foreach ($request->order as $index => $id) {
DynamicField::where('id', $id)->update(['order' => $index]);
}
return response()->json(['success' => true]);
}
/**
* Remove the specified resource from storage.
*/
public function destroy(string $id)
{
//
}
}
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class DynamicField extends Model
{
protected $fillable = [
'label',
'name',
'type',
'order'
];
}
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('posts', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->string('slug')->unique();
$table->json('fields')->nullable();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('posts');
}
};
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
protected $casts = [
'fields' => 'array',
];
protected $fillable = ['title', 'slug', 'fields'];
}
<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Models\Post;
use Illuminate\Http\Request;
class PostController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index()
{
$posts = Post::latest()->get();
return view('admin.posts.index', compact('posts'));
}
/**
* Show the form for creating a new resource.
*/
public function create()
{
return view('admin.posts.create');
}
/**
* Store a newly created resource in storage.
*/
public function store(Request $request)
{
$request->validate([
'title' => 'required|string|max:255',
'slug' => 'required|string|max:255|unique:pages,slug',
]);
Post::create([
'title' => $request->title,
'slug' => $request->slug,
'fields' => $request->fields ?? [],
]);
return redirect()->route('admin.posts.index')->with('success', 'Bài viết đã được tạo.');
}
/**
* Display the specified resource.
*/
public function show(Post $post)
{
//
}
/**
* Show the form for editing the specified resource.
*/
public function edit(Post $post)
{
//
}
/**
* Update the specified resource in storage.
*/
public function update(Request $request, Post $post)
{
$request->validate([
'title' => 'required|string|max:255',
'slug' => 'required|string|max:255|unique:posts,slug,' . $post->id,
]);
$post->update([
'title' => $request->title,
'slug' => $request->slug,
'fields' => $request->fields ?? [],
]);
return redirect()->route('admin.posts.index')->with('success', 'Cập nhật thành công');
}
/**
* Remove the specified resource from storage.
*/
public function destroy(Post $post)
{
//
}
}
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
protected $casts = [
'fields' => 'array',
];
protected $fillable = ['title', 'slug', 'fields'];
public function fieldGroup()
{
return $this->belongsTo(DynamicFieldGroup::class, 'field_group_id');
}
}
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class DynamicFieldGroup extends Model
{
public function fields()
{
return $this->hasMany(DynamicField::class, 'group_id');
}
}