Я знаю как .NET, так и PHP, и, насколько я понимаю, EntityFramework в .NET — это то же самое, что Laravel в PHP.
в .NET у нас есть @using (Ajax.BeginForm
что делает формы так же, как {!! Form::open
в PHP.
@using (Ajax.BeginForm
не обновляет всю страницу при отправке формы, и мне не нужно писать JQuery для этого. Итак, в основном это действует так же, как JQuery.ajax
Вопрос: Есть ли способ сделать частичное обновление страницы при отправке формы без написания JQuery в Laravel?
Бонусный вопрос
У нас также есть возможность передавать такие параметры, как onSuccess, OnComplete, OnBegin и param для передачи класса css формы. Можем ли мы сделать это в Laravel. Это возможно в Entity Framework в .NET
Проще говоря: нет.
Тем не менее, вы можете создать свой собственный пакет, который сделает это за вас.
Создайте простой класс для открытия и закрытия вашей формы:
namespace Ajaxform;
Class AjaxForm {
public function begin($action, $method, $options){
//do other stuff with options, minimal example
return '<form action="'.$action.'" method="'.$method.'" data-ajax-form/>';
}
public function end(){
return '</form>';
}
}
Затем создайте аксессуар Facade:
namespace AjaxForm\Facades;
Class AjaxFormFacade extends Illuminate\Support\Facades\Facade{
public static function getFacadeAccessor(){
return 'ajaxform';
}
}
Затем создайте поставщика услуг, который будет привязывать наш фасад к приложению:
namespace AjaxForm\Providers;
public function AjaxFormServiceProvider {
public function bind(){
$this->publishes([
__DIR__.'/../assets/' => public_path('vendor/ajaxform')
], 'public');
}
public function register(){
$this->app->bind('ajaxform', function(){
return new AjaxForm;
}
}
}
Ваш пакет поставщика будет выглядеть примерно так:
MyVendor (replace this with whatever you want)
- Src
- AjaxForm
- assets
ajax-form.js
- Facades
AjaxFormFacade.php
- Providers
AjaxFormServiceProvider.php
AjaxForm.php
Ваш composer.json
будет выглядеть так внутри вашего AjaxForm
напрямую (родительский, который находится перед каталогом Src)
{
"name": "myvendor/ajax-form",
"version" : "master",
"description": "An Ajax Form Wrapper.",
"license" : "MIT",
"keywords": ["ajaxform"],
"authors" : [
{
"name": "My Name",
"email": "wheredoigetahold@of.you"}
],
"require": {
"php": ">=5.5",
"illuminate/support": "4.*|5.*"},
"autoload": {
"psr-4": {
"Ajaxform\\": "src/AjaxForm/"}
},
"minimum-stability": "stable"}
Теперь, когда вы создали свой пакет поставщика, добавьте его в config/app.php
подайте заявку и сообщите МОК о нашем новом фасаде и поставщике:
Найти providers
массив и добавить это в конце:
MyVendor\AjaxForm\AjaxForm::class
Затем в массиве Фасады добавьте это в конце:
'AjaxForm' => 'MyVendor\AjaxForm\AjaxForm::class
Теперь вам просто нужно создать ajax-form.js
файл, который будет иметь нашу логику для адаптации нашей формы.
jQuery(function($){
$('form[data-ajax-form]').on('submit', function(e){
e.preventDefault();
var $this = $(this);
$.ajax({
method: $this.prop('method'),
url: $this.prop('action'),
data: $this.serialize()
}).done(function(resp){
//put some logic here
}).error(function(err){
//put some logic here
});
});
});
Теперь вы готовы назвать свою форму:
{{AjaxForm::begin(route('path.to.my.endpoint'), 'POST') }}
//form inputs go in here
{{AjaxForm::end()}}
Других решений пока нет …