Article

Similique eius magni ullam quia corrupti qui quae. Aut saepe dolor eius ex. Et eum est dicta doloremque quia. Earum aspernatur culpa et eum occaecati qui hic.

module structure

demo-module/
├─ Livewire/
│  ├─ Home.php
│  ├─ ArticlesTable.php
│  ├─ ArticlesView.php
│  └─ ArticlesEdit.php
├─ Views/
│  ├─ home.blade.php
│  ├─ articles_table.blade.php
│  ├─ articles_view.blade.php
│  ├─ articles_edit.blade.php
│  ├─ menu.blade.php
│  └─ frontend_menu.blade.php
├─ Models/               Article.php, Author.php
├─ Database/             Migrations/, Seeders/
├─ config.php            layout, menu entry
├─ routes.php
└─ DemoModuleServiceProvider.php

route

routes.php


Route::get('demo/articles/edit/{article:id?}'ArticlesEdit::class)
    ->
middleware(['web'])
    ->
name('demo.articles.edit')
    ->
crumbs(function ($crumbs$article null) {
        
$article
            
$crumbs->parent('demo.articles.view'$article)->push(__('Edit Article'), route_lang('demo.articles.edit'$article))
            : 
$crumbs->parent('demo.articles')->push(__('Add Article'), route_lang('demo.articles.edit'));
    });

component

Livewire/ArticlesEdit.php


<?php

namespace App\Modules\Demo\Livewire;

use 
App\Modules\Demo\Models\Article;
use 
App\Modules\Demo\Models\Author;
use 
Livewire\Component;

class 
ArticlesEdit extends Component
{
    public 
Article $article;

    
// Fields bound with x-rpd:: components: also what survives between requests
    // on a model that is not saved yet.
    
protected $rules = [
        
'article.title'     => 'required',
        
'article.author_id' => 'required|exists:demo_authors,id',
        
'article.body'      => 'nullable',
        
'article.public'    => 'nullable|boolean',
        
'article.publication_date' => 'required|date',
    ];

    public function 
mount(?Article $article null): void
    
{
        
$this->article $article ?? new Article();
    }

    public function 
save()
    {
        
$this->validate();
        
$this->article->save();

        return 
redirect()->to(route_lang('demo.articles.view'$this->article->getKey()));
    }

    public function 
render()
    {
        return 
view('demo::articles_edit', [
            
'authors' => Author::query()->orderBy('firstname')->pluck('firstname''id')->toArray(),
        ])->
layout('layout::admin');
    }
}

view

Views/articles_edit.blade.php


<x-rpd::card>
    <
x-rpd::edit title="Article">
        <
div class="row">
            <
x-rpd::input col="col-md-6" model="article.title" label="Title" />
            <
x-rpd::select col="col-md-6" model="article.author_id" :options="$authorslabel="Author" addempty />
        </
div>
        <
div class="row">
            <
x-rpd::date col="col-md-4" model="article.publication_date" format="dd/MM/yyyy" value-format="yyyy-MM-dd" label="Publication date" />
            <
x-rpd::checkbox col="col-md-4 pt-4" model="article.public" label="Public" checkLabel="visible to everyone" />
        </
div>
        <
div class="row mb-4">
            <
x-rpd::rich-text col="col-12" model="article.body" label="Body" />
        </
div>
        <
x-slot name="actions">
            <
x-rpd::button type="submit" label="Save" />
        </
x-slot>
    </
x-rpd::edit>
</
x-rpd::card>

Support
How can I help you today?