133 lines
2.7 KiB
PHP
133 lines
2.7 KiB
PHP
|
<?php
|
||
|
|
||
|
namespace App\View\Components;
|
||
|
|
||
|
use Illuminate\Support\Str;
|
||
|
use App\Abstracts\View\Components\Form as BaseForm;
|
||
|
|
||
|
class Form extends BaseForm
|
||
|
{
|
||
|
/** @var string */
|
||
|
public $method;
|
||
|
|
||
|
/** @var string */
|
||
|
public $action;
|
||
|
|
||
|
public $model;
|
||
|
|
||
|
/** @var string */
|
||
|
public $class;
|
||
|
|
||
|
/** @var string */
|
||
|
public $role;
|
||
|
|
||
|
/** @var string */
|
||
|
public $novalidate;
|
||
|
|
||
|
/** @var string */
|
||
|
public $enctype;
|
||
|
|
||
|
/** @var string */
|
||
|
public $acceptCharset;
|
||
|
|
||
|
public $route;
|
||
|
|
||
|
public $url;
|
||
|
|
||
|
public $submit;
|
||
|
|
||
|
/**
|
||
|
* Create a new component instance.
|
||
|
*
|
||
|
* @return void
|
||
|
*/
|
||
|
public function __construct(
|
||
|
string $method = 'POST',
|
||
|
string $action = '',
|
||
|
$model = false,
|
||
|
string $class = 'mb-0',
|
||
|
string $role = 'form',
|
||
|
string $novalidate = 'true',
|
||
|
string $enctype = 'multipart/form-data',
|
||
|
string $acceptCharset = 'UTF-8',
|
||
|
$route = '',
|
||
|
$url = '',
|
||
|
$submit = 'onSubmit'
|
||
|
) {
|
||
|
$this->method = Str::upper($method);
|
||
|
$this->action = $this->getAction($action, $route, $url);
|
||
|
$this->model = $model;
|
||
|
$this->class = $class;
|
||
|
$this->role = $role;
|
||
|
$this->novalidate = $novalidate;
|
||
|
$this->enctype = $enctype;
|
||
|
$this->acceptCharset = $acceptCharset;
|
||
|
$this->submit = $submit;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get the view / contents that represent the component.
|
||
|
*
|
||
|
* @return \Illuminate\Contracts\View\View|string
|
||
|
*/
|
||
|
public function render()
|
||
|
{
|
||
|
return view('components.form.index');
|
||
|
}
|
||
|
|
||
|
protected function getAction($action, $route, $url)
|
||
|
{
|
||
|
if (!empty($action)) {
|
||
|
return $action;
|
||
|
}
|
||
|
|
||
|
if (!empty($route)) {
|
||
|
return $this->getRouteAction($route);
|
||
|
}
|
||
|
|
||
|
if (!empty($url)) {
|
||
|
return $this->getUrlAction($url);
|
||
|
}
|
||
|
|
||
|
return '';
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get the action for a "url" option.
|
||
|
*
|
||
|
* @param array|string $options
|
||
|
*
|
||
|
* @return string
|
||
|
*/
|
||
|
protected function getUrlAction($options)
|
||
|
{
|
||
|
if (is_array($options)) {
|
||
|
return url($options[0], array_slice($options, 1));
|
||
|
}
|
||
|
|
||
|
return url($options);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get the action for a "route" option.
|
||
|
*
|
||
|
* @param array|string $options
|
||
|
*
|
||
|
* @return string
|
||
|
*/
|
||
|
protected function getRouteAction($options)
|
||
|
{
|
||
|
if (is_array($options)) {
|
||
|
$parameters = array_slice($options, 1);
|
||
|
|
||
|
if (array_keys($options) === [0, 1]) {
|
||
|
$parameters = head($parameters);
|
||
|
}
|
||
|
|
||
|
return route($options[0], $parameters);
|
||
|
}
|
||
|
|
||
|
return route($options);
|
||
|
}
|
||
|
}
|