This commit adds two new components for handling form inputs in the private section of the site. 'Form.php' provides a base class for forms with methods for retrieving request names. 'Input.php' extends this to handle input fields specifically, allowing title, name, type, and value to be specified. An associated Blade view 'input.blade.php' has been added to render these inputs in views. This helps in reusability and maintainability.

This commit is contained in:
Leonid Nikitin 2023-07-07 00:05:38 +06:00
parent 24098415b5
commit 55cd927f12
Signed by: kor-elf
GPG Key ID: 7DE8F80C5CEC2C0D
3 changed files with 89 additions and 0 deletions

View File

@ -0,0 +1,32 @@
<?php declare(strict_types=1);
namespace App\View\Components\Private\Forms;
use Illuminate\Support\Str;
use Illuminate\View\Component;
use Illuminate\View\View;
abstract class Form extends Component
{
private ?string $requestName = null;
abstract protected function getName(): string;
abstract public function render(): View;
protected function getRequestName(): string
{
if (!is_null($this->requestName)) {
return $this->requestName;
}
$this->requestName = Str::of($this->getName())
->replace(
['.', '[', ']'],
['_', '.', ''],
)
->rtrim('.')
->value();
return $this->requestName;
}
}

View File

@ -0,0 +1,50 @@
<?php declare(strict_types=1);
namespace App\View\Components\Private\Forms;
use Illuminate\Support\Str;
use Illuminate\View\View;
final class Input extends Form
{
public function __construct(
private readonly string $title,
private readonly string $name,
private readonly string $type = 'text',
private readonly ?string $value = ''
) { }
protected function getName(): string
{
return $this->name;
}
protected function getTitle(): string
{
return Str::ucfirst($this->title);
}
protected function getType(): string
{
return $this->type;
}
protected function getValue(): string
{
return (string) old($this->getRequestName(), $this->value);
}
/**
* @inheritDoc
*/
public function render(): View
{
return view('private.components.forms.input', [
'title' => $this->getTitle(),
'name' => $this->getName(),
'requestName' => $this->getRequestName(),
'type' => $this->getType(),
'value' => $this->getValue()
]);
}
}

View File

@ -0,0 +1,7 @@
<div class="mb-4">
<label for="form-input-{{ $requestName }}">{{ $title }}</label>
<input id="form-input-{{ $requestName }}" class="form-control @error($requestName) is-invalid @enderror" name="{{ $name }}" type="{{ $type }}" @if($type !== 'password') value="{{ $value }}" @endif {{ $attributes }}>
@error($name)
<span class="invalid-feedback">{{ $message }}</span>
@enderror
</div>