Laravel version update

Laravel version update
This commit is contained in:
Manish Verma
2018-08-06 18:48:58 +05:30
parent d143048413
commit 126fbb0255
13678 changed files with 1031482 additions and 778530 deletions

View File

@@ -1,41 +1,57 @@
{
"name": "laravelcollective/html",
"description": "HTML and Form Builders for the Laravel Framework",
"license": "MIT",
"homepage": "http://laravelcollective.com",
"support": {
"issues": "https://github.com/LaravelCollective/html/issues",
"source": "https://github.com/LaravelCollective/html"
},
"authors": [
{
"name": "Adam Engebretson",
"email": "adam@laravelcollective.com"
"name": "laravelcollective/html",
"description": "HTML and Form Builders for the Laravel Framework",
"license": "MIT",
"homepage": "https://laravelcollective.com",
"support": {
"issues": "https://github.com/LaravelCollective/html/issues",
"source": "https://github.com/LaravelCollective/html"
},
{
"name": "Taylor Otwell",
"email": "taylorotwell@gmail.com"
}
],
"require": {
"php": ">=5.5.9",
"illuminate/http": "5.2.*",
"illuminate/routing": "5.2.*",
"illuminate/session": "5.2.*",
"illuminate/support": "5.2.*",
"illuminate/view": "5.2.*"
},
"require-dev": {
"illuminate/database": "5.2.*",
"mockery/mockery": "~0.9",
"phpunit/phpunit": "~4.0"
},
"autoload": {
"psr-4": {
"Collective\\Html\\": "src/"
"authors": [
{
"name": "Adam Engebretson",
"email": "adam@laravelcollective.com"
},
{
"name": "Taylor Otwell",
"email": "taylorotwell@gmail.com"
}
],
"require": {
"php": ">=7.0.0",
"illuminate/http": "5.5.*",
"illuminate/routing": "5.5.*",
"illuminate/session": "5.5.*",
"illuminate/support": "5.5.*",
"illuminate/view": "5.5.*"
},
"files": [
"src/helpers.php"
]
}
"require-dev": {
"illuminate/database": "5.5.*",
"mockery/mockery": "~0.9.4",
"phpunit/phpunit": "~5.4"
},
"autoload": {
"psr-4": {
"Collective\\Html\\": "src/"
},
"files": [
"src/helpers.php"
]
},
"extra": {
"branch-alias": {
"dev-master": "5.5-dev"
},
"laravel": {
"providers": [
"Collective\\Html\\HtmlServiceProvider"
],
"aliases": {
"Form": "Collective\\Html\\FormFacade",
"Html": "Collective\\Html\\HtmlFacade"
}
}
},
"minimum-stability": "dev",
"prefer-stable": true
}

View File

@@ -41,7 +41,39 @@ trait FormAccessible
return $this->mutateFormAttribute($key, $value);
}
return $value;
$keys = explode('.', $key);
if ($this->isNestedModel($keys[0])) {
$relatedModel = $this->getRelation($keys[0]);
unset($keys[0]);
$key = implode('.', $keys);
if ($this->hasFormMutator($key)) {
return $relatedModel->getFormValue($key);
}
return data_get($relatedModel, $key);
}
// No form mutator, let the model resolve this
return data_get($this, $key);
}
/**
* Check for a nested model.
*
* @param string $key
*
* @return bool
*/
public function isNestedModel($key)
{
if (in_array($key, array_keys($this->getRelations()))) {
return true;
}
return false;
}
/**
@@ -54,8 +86,8 @@ trait FormAccessible
$methods = $this->getReflection()->getMethods(ReflectionMethod::IS_PUBLIC);
$mutator = collect($methods)
->first(function ($index, ReflectionMethod $method) use ($key) {
return $method->getName() == 'form' . Str::studly($key) . 'Attribute';
->first(function (ReflectionMethod $method) use ($key) {
return $method->getName() === 'form' . Str::studly($key) . 'Attribute';
});
return (bool) $mutator;

View File

@@ -2,18 +2,20 @@
namespace Collective\Html;
use DateTime;
use BadMethodCallException;
use Illuminate\Support\Collection;
use Illuminate\Support\HtmlString;
use Illuminate\Contracts\View\Factory;
use Illuminate\Session\SessionInterface;
use Illuminate\Support\Traits\Macroable;
use DateTime;
use Illuminate\Contracts\Routing\UrlGenerator;
use Illuminate\Contracts\Session\Session;
use Illuminate\Contracts\View\Factory;
use Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull;
use Illuminate\Http\Request;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\App;
use Illuminate\Support\HtmlString;
use Illuminate\Support\Traits\Macroable;
class FormBuilder
{
use Macroable, Componentable {
Macroable::__call as macroCall;
Componentable::__call as componentCall;
@@ -50,7 +52,7 @@ class FormBuilder
/**
* The session store implementation.
*
* @var \Illuminate\Session\SessionInterface
* @var \Illuminate\Contracts\Session\Session
*/
protected $session;
@@ -68,6 +70,8 @@ class FormBuilder
*/
protected $labels = [];
protected $request;
/**
* The reserved form open attributes.
*
@@ -89,6 +93,14 @@ class FormBuilder
*/
protected $skipValueTypes = ['file', 'password', 'checkbox', 'radio'];
/**
* Input Type.
*
* @var null
*/
protected $type = null;
/**
* Create a new form builder instance.
*
@@ -97,12 +109,13 @@ class FormBuilder
* @param \Illuminate\Contracts\View\Factory $view
* @param string $csrfToken
*/
public function __construct(HtmlBuilder $html, UrlGenerator $url, Factory $view, $csrfToken)
public function __construct(HtmlBuilder $html, UrlGenerator $url, Factory $view, $csrfToken, Request $request = null)
{
$this->url = $url;
$this->html = $html;
$this->view = $view;
$this->csrfToken = $csrfToken;
$this->request = $request;
}
/**
@@ -177,6 +190,16 @@ class FormBuilder
{
$this->model = $model;
}
/**
* Get the current model instance on the form builder.
*
* @return mixed $model
*/
public function getModel()
{
return $this->model;
}
/**
* Close the current form.
@@ -199,7 +222,7 @@ class FormBuilder
*/
public function token()
{
$token = ! empty($this->csrfToken) ? $this->csrfToken : $this->session->getToken();
$token = ! empty($this->csrfToken) ? $this->csrfToken : $this->session->token();
return $this->hidden('_token', $token);
}
@@ -210,16 +233,21 @@ class FormBuilder
* @param string $name
* @param string $value
* @param array $options
* @param bool $escape_html
*
* @return \Illuminate\Support\HtmlString
*/
public function label($name, $value = null, $options = [])
public function label($name, $value = null, $options = [], $escape_html = true)
{
$this->labels[] = $name;
$options = $this->html->attributes($options);
$value = e($this->formatLabel($name, $value));
$value = $this->formatLabel($name, $value);
if ($escape_html) {
$value = $this->html->entities($value);
}
return $this->toHtmlString('<label for="' . $name . '"' . $options . '>' . $value . '</label>');
}
@@ -249,6 +277,8 @@ class FormBuilder
*/
public function input($type, $name, $value = null, $options = [])
{
$this->type = $type;
if (! isset($options['name'])) {
$options['name'] = $name;
}
@@ -313,6 +343,20 @@ class FormBuilder
return $this->input('hidden', $name, $value, $options);
}
/**
* Create a search input field.
*
* @param string $name
* @param string $value
* @param array $options
*
* @return \Illuminate\Support\HtmlString
*/
public function search($name, $value = null, $options = [])
{
return $this->input('search', $name, $value, $options);
}
/**
* Create an e-mail input field.
*
@@ -461,6 +505,8 @@ class FormBuilder
*/
public function textarea($name, $value = null, $options = [])
{
$this->type = 'textarea';
if (! isset($options['name'])) {
$options['name'] = $name;
}
@@ -481,7 +527,7 @@ class FormBuilder
// the element. Then we'll create the final textarea elements HTML for us.
$options = $this->html->attributes($options);
return $this->toHtmlString('<textarea' . $options . '>' . e($value) . '</textarea>');
return $this->toHtmlString('<textarea' . $options . '>' . e($value). '</textarea>');
}
/**
@@ -526,22 +572,32 @@ class FormBuilder
*
* @param string $name
* @param array $list
* @param string $selected
* @param array $options
* @param string|bool $selected
* @param array $selectAttributes
* @param array $optionsAttributes
* @param array $optgroupsAttributes
*
* @return \Illuminate\Support\HtmlString
*/
public function select($name, $list = [], $selected = null, $options = [])
{
public function select(
$name,
$list = [],
$selected = null,
array $selectAttributes = [],
array $optionsAttributes = [],
array $optgroupsAttributes = []
) {
$this->type = 'select';
// When building a select box the "value" attribute is really the selected one
// so we will use that when checking the model or session for a value which
// should provide a convenient method of re-populating the forms on post.
$selected = $this->getValueAttribute($name, $selected);
$options['id'] = $this->getIdAttribute($name, $options);
$selectAttributes['id'] = $this->getIdAttribute($name, $selectAttributes);
if (! isset($options['name'])) {
$options['name'] = $name;
if (! isset($selectAttributes['name'])) {
$selectAttributes['name'] = $name;
}
// We will simply loop through the options and build an HTML value for each of
@@ -549,23 +605,25 @@ class FormBuilder
// all together into one single HTML element that can be put on the form.
$html = [];
if (isset($options['placeholder'])) {
$html[] = $this->placeholderOption($options['placeholder'], $selected);
unset($options['placeholder']);
if (isset($selectAttributes['placeholder'])) {
$html[] = $this->placeholderOption($selectAttributes['placeholder'], $selected);
unset($selectAttributes['placeholder']);
}
foreach ($list as $value => $display) {
$html[] = $this->getSelectOption($display, $value, $selected);
$optionAttributes = $optionsAttributes[$value] ?? [];
$optgroupAttributes = $optgroupsAttributes[$value] ?? [];
$html[] = $this->getSelectOption($display, $value, $selected, $optionAttributes, $optgroupAttributes);
}
// Once we have all of this HTML, we can join this into a single element after
// formatting the attributes into an HTML "attributes" string, then we will
// build out a final select statement, which will contain all the values.
$options = $this->html->attributes($options);
$selectAttributes = $this->html->attributes($selectAttributes);
$list = implode('', $html);
return $this->toHtmlString("<select{$options}>{$list}</select>");
return $this->toHtmlString("<select{$selectAttributes}>{$list}</select>");
}
/**
@@ -629,16 +687,18 @@ class FormBuilder
* @param string $display
* @param string $value
* @param string $selected
* @param array $attributes
* @param array $optgroupAttributes
*
* @return \Illuminate\Support\HtmlString
*/
public function getSelectOption($display, $value, $selected)
public function getSelectOption($display, $value, $selected, array $attributes = [], array $optgroupAttributes = [])
{
if (is_array($display)) {
return $this->optionGroup($display, $value, $selected);
return $this->optionGroup($display, $value, $selected, $optgroupAttributes, $attributes);
}
return $this->option($display, $value, $selected);
return $this->option($display, $value, $selected, $attributes);
}
/**
@@ -647,18 +707,22 @@ class FormBuilder
* @param array $list
* @param string $label
* @param string $selected
* @param array $attributes
* @param array $optionsAttributes
*
* @return \Illuminate\Support\HtmlString
*/
protected function optionGroup($list, $label, $selected)
protected function optionGroup($list, $label, $selected, array $attributes = [], array $optionsAttributes = [])
{
$html = [];
foreach ($list as $value => $display) {
$html[] = $this->option($display, $value, $selected);
}
$optionAttributes = $optionsAttributes[$value] ?? [];
return $this->toHtmlString('<optgroup label="' . e($label) . '">' . implode('', $html) . '</optgroup>');
$html[] = $this->option($display, $value, $selected, $optionAttributes);
}
return $this->toHtmlString('<optgroup label="' . e($label) . '"' . $this->html->attributes($attributes) . '>' . implode('', $html) . '</optgroup>');
}
/**
@@ -667,16 +731,22 @@ class FormBuilder
* @param string $display
* @param string $value
* @param string $selected
* @param array $attributes
*
* @return \Illuminate\Support\HtmlString
*/
protected function option($display, $value, $selected)
protected function option($display, $value, $selected, array $attributes = [])
{
$selected = $this->getSelectedValue($value, $selected);
$options = ['value' => $value, 'selected' => $selected];
$options = array_merge(['value' => $value, 'selected' => $selected], $attributes);
return $this->toHtmlString('<option' . $this->html->attributes($options) . '>' . e($display) . '</option>');
$string = '<option' . $this->html->attributes($options) . '>';
if ($display !== null) {
$string .= e($display) . '</option>';
}
return $this->toHtmlString($string);
}
/**
@@ -691,8 +761,10 @@ class FormBuilder
{
$selected = $this->getSelectedValue(null, $selected);
$options = compact('selected');
$options['value'] = '';
$options = [
'selected' => $selected,
'value' => '',
];
return $this->toHtmlString('<option' . $this->html->attributes($options) . '>' . e($display) . '</option>');
}
@@ -708,10 +780,14 @@ class FormBuilder
protected function getSelectedValue($value, $selected)
{
if (is_array($selected)) {
return in_array($value, $selected) ? 'selected' : null;
return in_array($value, $selected, true) || in_array((string) $value, $selected, true) ? 'selected' : null;
} elseif ($selected instanceof Collection) {
return $selected->contains($value) ? 'selected' : null;
}
return ((string) $value == (string) $selected) ? 'selected' : null;
if (is_int($value) && is_bool($selected)) {
return (bool)$value === $selected;
}
return ((string) $value === (string) $selected) ? 'selected' : null;
}
/**
@@ -761,6 +837,8 @@ class FormBuilder
*/
protected function checkable($type, $name, $value, $checked, $options)
{
$this->type = $type;
$checked = $this->getCheckedState($type, $name, $value, $checked);
if ($checked) {
@@ -790,7 +868,7 @@ class FormBuilder
return $this->getRadioCheckedState($name, $value, $checked);
default:
return $this->getValueAttribute($name) == $value;
return $this->getValueAttribute($name) === $value;
}
}
@@ -805,11 +883,13 @@ class FormBuilder
*/
protected function getCheckboxCheckedState($name, $value, $checked)
{
if (isset($this->session) && ! $this->oldInputIsEmpty() && is_null($this->old($name))) {
$request = $this->request($name);
if (isset($this->session) && ! $this->oldInputIsEmpty() && is_null($this->old($name)) && !$request) {
return false;
}
if ($this->missingOldAndModel($name)) {
if ($this->missingOldAndModel($name) && is_null($request)) {
return $checked;
}
@@ -835,11 +915,13 @@ class FormBuilder
*/
protected function getRadioCheckedState($name, $value, $checked)
{
if ($this->missingOldAndModel($name)) {
$request = $this->request($name);
if ($this->missingOldAndModel($name) && !$request) {
return $checked;
}
return $this->getValueAttribute($name) == $value;
return $this->getValueAttribute($name) === $value;
}
/**
@@ -938,7 +1020,7 @@ class FormBuilder
{
$method = strtoupper($method);
return $method != 'GET' ? 'POST' : $method;
return $method !== 'GET' ? 'POST' : $method;
}
/**
@@ -1040,7 +1122,7 @@ class FormBuilder
// If the method is something other than GET we will go ahead and attach the
// CSRF token to the form, as this can't hurt and is convenient to simply
// always have available on every form the developers creates for them.
if ($method != 'GET') {
if ($method !== 'GET') {
$appendage .= $this->token();
}
@@ -1080,8 +1162,29 @@ class FormBuilder
return $value;
}
if (! is_null($this->old($name))) {
return $this->old($name);
$old = $this->old($name);
if (! is_null($old) && $name !== '_method') {
return $old;
}
if (function_exists('app')) {
$hasNullMiddleware = app("Illuminate\Contracts\Http\Kernel")
->hasMiddleware(ConvertEmptyStringsToNull::class);
if ($hasNullMiddleware
&& is_null($old)
&& is_null($value)
&& ! is_null($this->view->shared('errors'))
&& count($this->view->shared('errors')) > 0
) {
return null;
}
}
$request = $this->request($name);
if (! is_null($request) && $name !== '_method') {
return $request;
}
if (! is_null($value)) {
@@ -1093,6 +1196,20 @@ class FormBuilder
}
}
/**
* Get value from current Request
* @param $name
* @return array|null|string
*/
protected function request($name)
{
if (! isset($this->request)) {
return null;
}
return $this->request->input($this->transformKey($name));
}
/**
* Get the model value that should be assigned to the field.
*
@@ -1102,8 +1219,10 @@ class FormBuilder
*/
protected function getModelValueAttribute($name)
{
$key = $this->transformKey($name);
if (method_exists($this->model, 'getFormValue')) {
return $this->model->getFormValue($name);
return $this->model->getFormValue($key);
}
return data_get($this->model, $this->transformKey($name));
@@ -1119,7 +1238,25 @@ class FormBuilder
public function old($name)
{
if (isset($this->session)) {
return $this->session->getOldInput($this->transformKey($name));
$key = $this->transformKey($name);
$payload = $this->session->getOldInput($key);
if (! is_array($payload)) {
return $payload;
}
if (! in_array($this->type, ['select', 'checkbox'])) {
if (! isset($this->payload[$key])) {
$this->payload[$key] = collect($payload);
}
if (! empty($this->payload[$key])) {
$value = $this->payload[$key]->shift();
return $value;
}
}
return $payload;
}
}
@@ -1130,7 +1267,7 @@ class FormBuilder
*/
public function oldInputIsEmpty()
{
return (isset($this->session) && count($this->session->getOldInput()) == 0);
return (isset($this->session) && count($this->session->getOldInput()) === 0);
}
/**
@@ -1160,7 +1297,7 @@ class FormBuilder
/**
* Get the session store implementation.
*
* @return \Illuminate\Session\SessionInterface $session
* @return \Illuminate\Contracts\Session\Session $session
*/
public function getSessionStore()
{
@@ -1170,11 +1307,11 @@ class FormBuilder
/**
* Set the session store implementation.
*
* @param \Illuminate\Session\SessionInterface $session
* @param \Illuminate\Contracts\Session\Session $session
*
* @return $this
*/
public function setSessionStore(SessionInterface $session)
public function setSessionStore(Session $session)
{
$this->session = $session;
@@ -1193,16 +1330,12 @@ class FormBuilder
*/
public function __call($method, $parameters)
{
try {
if (static::hasComponent($method)) {
return $this->componentCall($method, $parameters);
} catch (BadMethodCallException $e) {
//
}
try {
if (static::hasMacro($method)) {
return $this->macroCall($method, $parameters);
} catch (BadMethodCallException $e) {
//
}
throw new BadMethodCallException("Method {$method} does not exist.");

View File

@@ -10,7 +10,6 @@ use Illuminate\Contracts\Routing\UrlGenerator;
class HtmlBuilder
{
use Macroable, Componentable {
Macroable::__call as macroCall;
Componentable::__call as componentCall;
@@ -79,7 +78,7 @@ class HtmlBuilder
{
$attributes['src'] = $this->url->asset($url, $secure);
return $this->toHtmlString('<script' . $this->attributes($attributes) . '></script>' . PHP_EOL);
return $this->toHtmlString('<script' . $this->attributes($attributes) . '></script>');
}
/**
@@ -95,11 +94,11 @@ class HtmlBuilder
{
$defaults = ['media' => 'all', 'type' => 'text/css', 'rel' => 'stylesheet'];
$attributes = $attributes + $defaults;
$attributes = array_merge($attributes, $defaults);
$attributes['href'] = $this->url->asset($url, $secure);
return $this->toHtmlString('<link' . $this->attributes($attributes) . '>' . PHP_EOL);
return $this->toHtmlString('<link' . $this->attributes($attributes) . '>');
}
/**
@@ -133,11 +132,11 @@ class HtmlBuilder
{
$defaults = ['rel' => 'shortcut icon', 'type' => 'image/x-icon'];
$attributes = $attributes + $defaults;
$attributes = array_merge($attributes, $defaults);
$attributes['href'] = $this->url->asset($url, $secure);
return $this->toHtmlString('<link' . $this->attributes($attributes) . '>' . PHP_EOL);
return $this->toHtmlString('<link' . $this->attributes($attributes) . '>');
}
/**
@@ -147,10 +146,11 @@ class HtmlBuilder
* @param string $title
* @param array $attributes
* @param bool $secure
* @param bool $escape
*
* @return \Illuminate\Support\HtmlString
*/
public function link($url, $title = null, $attributes = [], $secure = null)
public function link($url, $title = null, $attributes = [], $secure = null, $escape = true)
{
$url = $this->url->to($url, [], $secure);
@@ -158,7 +158,11 @@ class HtmlBuilder
$title = $url;
}
return $this->toHtmlString('<a href="' . $url . '"' . $this->attributes($attributes) . '>' . $this->entities($title) . '</a>');
if ($escape) {
$title = $this->entities($title);
}
return $this->toHtmlString('<a href="' . $this->entities($url) . '"' . $this->attributes($attributes) . '>' . $title . '</a>');
}
/**
@@ -242,18 +246,23 @@ class HtmlBuilder
* @param string $email
* @param string $title
* @param array $attributes
* @param bool $escape
*
* @return \Illuminate\Support\HtmlString
*/
public function mailto($email, $title = null, $attributes = [])
public function mailto($email, $title = null, $attributes = [], $escape = true)
{
$email = $this->email($email);
$title = $title ?: $email;
if ($escape) {
$title = $this->entities($title);
}
$email = $this->obfuscate('mailto:') . $email;
return $this->toHtmlString('<a href="' . $email . '"' . $this->attributes($attributes) . '>' . $this->entities($title) . '</a>');
return $this->toHtmlString('<a href="' . $email . '"' . $this->attributes($attributes) . '>' . $title . '</a>');
}
/**
@@ -268,6 +277,18 @@ class HtmlBuilder
return str_replace('@', '&#64;', $this->obfuscate($email));
}
/**
* Generates non-breaking space entities based on number supplied.
*
* @param int $num
*
* @return string
*/
public function nbsp($num = 1)
{
return str_repeat('&nbsp;', $num);
}
/**
* Generate an ordered list of items.
*
@@ -336,7 +357,7 @@ class HtmlBuilder
{
$html = '';
if (count($list) == 0) {
if (count($list) === 0) {
return $html;
}
@@ -420,11 +441,18 @@ class HtmlBuilder
*/
protected function attributeElement($key, $value)
{
// For numeric keys we will assume that the key and the value are the same
// as this will convert HTML attributes such as "required" to a correct
// form like required="required" instead of using incorrect numerics.
// For numeric keys we will assume that the value is a boolean attribute
// where the presence of the attribute represents a true value and the
// absence represents a false value.
// This will convert HTML attributes such as "required" to a correct
// form instead of using incorrect numerics.
if (is_numeric($key)) {
$key = $value;
return $value;
}
// Treat boolean attributes as HTML properties
if (is_bool($value) && $key !== 'value') {
return $value ? $key : '';
}
if (! is_null($value)) {
@@ -483,7 +511,7 @@ class HtmlBuilder
$attributes = array_merge($defaults, $attributes);
return $this->toHtmlString('<meta' . $this->attributes($attributes) . '>' . PHP_EOL);
return $this->toHtmlString('<meta' . $this->attributes($attributes) . '>');
}
/**
@@ -497,8 +525,8 @@ class HtmlBuilder
*/
public function tag($tag, $content, array $attributes = [])
{
$content = is_array($content) ? implode(PHP_EOL, $content) : $content;
return $this->toHtmlString('<' . $tag . $this->attributes($attributes) . '>' . PHP_EOL . $this->toHtmlString($content) . PHP_EOL . '</' . $tag . '>' . PHP_EOL);
$content = is_array($content) ? implode('', $content) : $content;
return $this->toHtmlString('<' . $tag . $this->attributes($attributes) . '>' . $this->toHtmlString($content) . '</' . $tag . '>');
}
/**
@@ -525,16 +553,12 @@ class HtmlBuilder
*/
public function __call($method, $parameters)
{
try {
if (static::hasComponent($method)) {
return $this->componentCall($method, $parameters);
} catch (BadMethodCallException $e) {
//
}
try {
if (static::hasMacro($method)) {
return $this->macroCall($method, $parameters);
} catch (BadMethodCallException $e) {
//
}
throw new BadMethodCallException("Method {$method} does not exist.");

View File

@@ -2,10 +2,20 @@
namespace Collective\Html;
use Illuminate\Support\Facades\Blade;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Str;
use Illuminate\View\Compilers\BladeCompiler;
class HtmlServiceProvider extends ServiceProvider
{
/**
* Supported Blade Directives
*
* @var array
*/
protected $directives = ['entities','decode','script','style','image','favicon','link','secureLink','linkAsset','linkSecureAsset','linkRoute','linkAction','mailto','email','ol','ul','dl','meta','tag','open','model','close','token','label','input','text','password','hidden','email','tel','number','date','datetime','datetimeLocal','time','url','file','textarea','select','selectRange','selectYear','selectMonth','getSelectOption','checkbox','radio','reset','image','color','submit','button','old'
];
/**
* Indicates if loading of the provider is deferred.
@@ -25,8 +35,10 @@ class HtmlServiceProvider extends ServiceProvider
$this->registerFormBuilder();
$this->app->alias('html', 'Collective\Html\HtmlBuilder');
$this->app->alias('form', 'Collective\Html\FormBuilder');
$this->app->alias('html', HtmlBuilder::class);
$this->app->alias('form', FormBuilder::class);
$this->registerBladeDirectives();
}
/**
@@ -49,12 +61,40 @@ class HtmlServiceProvider extends ServiceProvider
protected function registerFormBuilder()
{
$this->app->singleton('form', function ($app) {
$form = new FormBuilder($app['html'], $app['url'], $app['view'], $app['session.store']->getToken());
$form = new FormBuilder($app['html'], $app['url'], $app['view'], $app['session.store']->token(), $app['request']);
return $form->setSessionStore($app['session.store']);
});
}
/**
* Register Blade directives.
*
* @return void
*/
protected function registerBladeDirectives()
{
$this->app->afterResolving('blade.compiler', function (BladeCompiler $bladeCompiler) {
$namespaces = [
'Html' => get_class_methods(HtmlBuilder::class),
'Form' => get_class_methods(FormBuilder::class),
];
foreach ($namespaces as $namespace => $methods) {
foreach ($methods as $method) {
if (in_array($method, $this->directives)) {
$snakeMethod = Str::snake($method);
$directive = strtolower($namespace).'_'.$snakeMethod;
$bladeCompiler->directive($directive, function ($expression) use ($namespace, $method) {
return "<?php echo $namespace::$method($expression); ?>";
});
}
}
}
});
}
/**
* Get the services provided by the provider.
*
@@ -62,6 +102,6 @@ class HtmlServiceProvider extends ServiceProvider
*/
public function provides()
{
return ['html', 'form', 'Collective\Html\HtmlBuilder', 'Collective\Html\FormBuilder'];
return ['html', 'form', HtmlBuilder::class, FormBuilder::class];
}
}

View File

@@ -8,12 +8,13 @@ if (! function_exists('link_to')) {
* @param string $title
* @param array $attributes
* @param bool $secure
* @param bool $escape
*
* @return string
*/
function link_to($url, $title = null, $attributes = [], $secure = null)
function link_to($url, $title = null, $attributes = [], $secure = null, $escape = true)
{
return app('html')->link($url, $title, $attributes, $secure);
return app('html')->link($url, $title, $attributes, $secure, $escape);
}
}