Laravel 5.6.27 — Как я могу сделать пользовательские макросы формы?

Прежде всего, я очень плохо знаком с Laravel.

На данный момент пытаюсь сделать кастом макрос за forms в Laravel 5.6.27

Вот что у меня есть:

Приложение / Услуги / Macros.php

<?php namespace App\Services;

use Collective\Html\FormBuilder;

class Macros extends FormBuilder {
public function selectState($name, $selected = null, $options = array())
{
$list = [
'' => 'Select One...',
'AL' => 'Alabama',
'AK' => 'Alaska',
'AZ' => 'Arizona',
'AR' => 'Arkansas',
'CA' => 'California',
'CO' => 'Colorado',
'CT' => 'Connecticut',
'DE' => 'Delaware',
'DC' => 'District of Columbia',
'FL' => 'Florida',
'GA' => 'Georgia',
'HI' => 'Hawaii',
'ID' => 'Idaho',
'IL' => 'Illinois',
'IN' => 'Indiana',
'IA' => 'Iowa',
'KS' => 'Kansas',
'KY' => 'Kentucky',
'LA' => 'Louisiana',
'ME' => 'Maine',
'MD' => 'Maryland',
'MA' => 'Massachusetts',
'MI' => 'Michigan',
'MN' => 'Minnesota',
'MS' => 'Mississippi',
'MO' => 'Missouri',
'MT' => 'Montana',
'NE' => 'Nebraska',
'NV' => 'Nevada',
'NH' => 'New Hampshire',
'NJ' => 'New Jersey',
'NM' => 'New Mexico',
'NY' => 'New York',
'NC' => 'North Carolina',
'ND' => 'North Dakota',
'OH' => 'Ohio',
'OK' => 'Oklahoma',
'OR' => 'Oregon',
'PA' => 'Pennsylvania',
'RI' => 'Rhode Island',
'SC' => 'South Carolina',
'SD' => 'South Dakota',
'TN' => 'Tennessee',
'TX' => 'Texas',
'UT' => 'Utah',
'VT' => 'Vermont',
'VA' => 'Virginia',
'WA' => 'Washington',
'WV' => 'West Virginia',
'WI' => 'Wisconsin',
'WY' => 'Wyoming'
];

return $this->select($name, $list, $selected, $options);
}
}

приложение / Провайдеры / MacroServiceProvider.php

<?php namespace App\Providers;

use Collective\Html\HtmlServiceProvider;

class MacroServiceProvider extends HtmlServiceProvider {

public function register()
{
parent::register();

require base_path() . '/app/Services/Macros.php';
}
}

Я также добавил в конфиг / app.php

Collective\Html\HtmlServiceProvider::class,
App\Providers\MacroServiceProvider::class,

Тогда по моему Посмотреть Я выпустил этот код:

{{ Form::selectState() }}

Я получаю следующую ошибку:

«Метод selectState не существует. (Вид: C: \ MAMP \ htdocs \ crafto \ resources \ views \ contact.blade.php)»

Понятия не имею, что я делаю не так. Похоже, я не могу найти selectState функция, которую я сделал. Я много чего перепробовал, но не очень разбираюсь Laravel. Бьюсь головой об стену над ним.

Может кто-нибудь объяснить мне, как Macros работать, а в частности Form Macros?

Благодарю.

0

Решение

Не переопределяйте класс библиотеки. Вам будет очень трудно заставить это работать.

FormBuilder использует Macroable черта, чтобы определить макросы вы можете сделать:

приложение / Провайдеры / MacroServiceProvider.php

public function register()
{
parent::register();
FormBuilder::macro('selectState', function ($name, $selected = null, $options = array())
{
$list = [
'' => 'Select One...',
'AL' => 'Alabama',
'AK' => 'Alaska',
'AZ' => 'Arizona',
'AR' => 'Arkansas',
'CA' => 'California',
'CO' => 'Colorado',
'CT' => 'Connecticut',
'DE' => 'Delaware',
'DC' => 'District of Columbia',
'FL' => 'Florida',
'GA' => 'Georgia',
'HI' => 'Hawaii',
'ID' => 'Idaho',
'IL' => 'Illinois',
'IN' => 'Indiana',
'IA' => 'Iowa',
'KS' => 'Kansas',
'KY' => 'Kentucky',
'LA' => 'Louisiana',
'ME' => 'Maine',
'MD' => 'Maryland',
'MA' => 'Massachusetts',
'MI' => 'Michigan',
'MN' => 'Minnesota',
'MS' => 'Mississippi',
'MO' => 'Missouri',
'MT' => 'Montana',
'NE' => 'Nebraska',
'NV' => 'Nevada',
'NH' => 'New Hampshire',
'NJ' => 'New Jersey',
'NM' => 'New Mexico',
'NY' => 'New York',
'NC' => 'North Carolina',
'ND' => 'North Dakota',
'OH' => 'Ohio',
'OK' => 'Oklahoma',
'OR' => 'Oregon',
'PA' => 'Pennsylvania',
'RI' => 'Rhode Island',
'SC' => 'South Carolina',
'SD' => 'South Dakota',
'TN' => 'Tennessee',
'TX' => 'Texas',
'UT' => 'Utah',
'VT' => 'Vermont',
'VA' => 'Virginia',
'WA' => 'Washington',
'WV' => 'West Virginia',
'WI' => 'Wisconsin',
'WY' => 'Wyoming'
];

return $this->select($name, $list, $selected, $options);
});

Что за Macroable trait делает, по сути, просто содержит массив дополнительных функций (макросов) и вызывает их через __call или же __callStatic магический метод.

Конечно, это работает только для методов, которые еще не определены в базовом классе.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]