Laravel - modal window - EDIT

Pozdrav,

imam 2 problema kod editiranja u modal window-u (Bootstrap). Prikaže dobro podatke sve osim spola i statusa (select polja, ostanu mi defaultna). Kad kliknem na Spremi sprema se dobro osim zadnje osobe koja se nalazi u tablici (ne DB, nego tablici ispisanoj na ekranu, osoba za zadnjim ID-em ), kao da pregazi osobu ispred. Ne znam gdje sam pogriješila. Molim Vas pomozite. Nikako da nađem pravo rješenje.

DirectoriesController

Izrezak

directory.blade.php

Form

app.js

1.Izvrti query u workbenchu ili consoli i vidi što ti vraća

2.Kako ti izgleda funkcija za update?

2.Složi si xdebug i debbugiraj aplikaciju

Da li ima kakve greske u logu?

U edit metodi vraćaš egzaktan model (iako bi naziv treb’o biti directory a ne directories) dok na prikazanom blade template-u vrtiš kolekciju modela kroz petlju. Template ne pripada edit($id)-u?

Ovako … kad otvorim consolu… nema nikakve greške… ili možda ja krivo gledam… ali kad otvorim consolu piše mi ono što sam zadala u app.js-u… evo slika… ne znam što treba pogledati…

Funkcija za update izgleda ovako:

Možeš li mi molim te konkretnije objasniti što pogrešno radim? :disappointed_relieved:
template bi trebao pripadati editu… sve ovo pripada editu… :cold_sweat:

Error log od apacha.

Pokušavam da shvatim kako to (i kako treba da) izgleda. Ispravi me ako griješim:

  1. imaš listing
  2. u svakom tom redu imaš link/button za edit
  3. klikom tog button-a plan je da se otvori modal sa trenutnim podacima item-a koji su u poljima forme za izmjenu

Ako je ovako k’o što je opisano iznad, ne treba ti edit strana, već na index/listingu ti samo treba da pored svakog item-a zakačiš link za update() metod.
Edit strana se logički koristi za prikaz jednog jedinstvenog item-a tj. kad se radi full http request.
Ovde ti je modal na index strani. I s tim u vezi ti popunjavaš polja u modalu sa podacima koje si već dovukla na index stranu ($directories). Isto ti ne treba id u URL-u u ovakvom rasporedu jer lako možeš uvući $item->id u hidden polje.
Tako da modal treba da sadrži formu koju popunjavaš jQuery-jem što se tiče vrijednosti.

Na to bi mi ličilo i ne vidim primjenu edit() GET request-a.

Stardate supplemental

Mala ispravka: mislio sam reći da ti ne treba id u address bar-u ali ti ipak treba u form action-u, tako da ovu formu ne treba da renderuješ Laravelom-om/PHP-om već treba da imaš pripremljen blanko obrazac čije vrijednosti popunjavaš JS-om.

//pseudo code
$('button').on('click', function(){
    $("modal").on('show', function(){
        // clearValues();
        // populateNewValues();
    });
});

directory.blade.php prikazuje tablicu imena, i gumb za Edit i Delete (za svaki red) kao što si gore napisao.
U tom file-u je dakle prikaz odnosno tablica, također gumb Create i modal window za njega. Sad ako sam dobro shvatila trebala bih u istom modal window-u napraviti edit?

Ne. Mada bi i to moglo. :smile:
Ali nema potrebe. Napravi dva modala id="modal-create" i id="modal-edit".
S tim da ja ne bi’ popunjav’o modal za editovanje Laravelom već bi’ ostavio JS da to učini svaki put kad se klikne button za izvjestan red.

Evo ih moje izmjene:

directory.blade.php

Form

muči me dio $item->id jer u consoli prikazuje samo jedan broj, onaj zadnju uneseni koji sam spomenula i koji gazi sve ispred sebe… :yum:

App.js

jesam li na pravom tragu? :sweat_smile:

@malabo Možeš li prekopirati kod iz Form fajla da ne prekucavam sliku?

<div class=“modal fade bd-example-modal-md” id=“editDirectory” tabindex="-1" role=“dialog” aria-labelledby=“editDirectoryModalLabel” aria-hidden=“true” data-backdrop=“false”>
<div class=“modal-dialog modal-md” role=“document”>
<div class=“modal-content”>
<div class=“modal-header”>
<h5 class=“modal-title” id=“editDirectoryModalLabel”>Ažuriranje novog korisnika</h5>
<button type=“button” class=“close” data-dismiss=“modal” aria-label=“Close”>
<span aria-hidden=“true”>&times;</span>
</button>
</div>
<div class=“modal-body”>
{!! Form::open ([‘method’ => ‘PATCH’, ‘action’ => [‘DirectoriesController@update’, ‘$item->id’ ]]) !!}
{!! csrf_field() !!}
<input type=“hidden” name=“item_id” id=“dir_id” value=""/>
@include(‘pages.admin.forms-admin.edit.edit-directory’)
{{–{!! Form::hidden(’_method’,‘PATCH’)!!}–}}
{!! Form::close() !!}
</div>
</div>
</div>
</div>

<div class=“form-group has-feedback”>
{{Form::label(‘name’,‘Ime’)}}
{{Form::text(‘name’,’’, [‘class’ => ‘form-control’, ‘id’ => ‘name’, ‘placeholder’ => ‘Upišite ime’])}}
</div>
<div class=“form-group has-feedback”>
{{Form::label(‘surname’,‘Prezime’)}}
{{Form::text(‘surname’,’’, [‘class’ => ‘form-control’, ‘id’ => ‘surname’, ‘placeholder’ => ‘Upišite prezime’])}}
</div>
<div class=“form-group has-feedback”>
{{Form::label(‘email’,‘Email’)}}
{{Form::email(‘email’,’’, [‘class’ => ‘form-control’, ‘id’ => ‘email’, ‘placeholder’ => ‘[email protected]’])}}
</div>
<div class=“form-group has-feedback”>
{{Form::label(‘phone’,‘Telefon’)}}
{{Form::number(‘phone’,’’, [‘class’ => ‘form-control’, ‘id’ => ‘phone’, ‘placeholder’ => ‘38591222333’])}}
</div>
<div class=“form-group has-feedback”>
{{Form::label(‘town’,‘Grad’)}}
{{Form::text(‘town’,’’, [‘class’ => ‘form-control’, ‘id’ => ‘town’, ‘placeholder’ => ‘Upiši grad’])}}
</div>
<div class=“form-group has-feedback”>
{{Form::label(‘country’,‘Država’)}}
{{Form::text(‘country’,’’, [‘class’ => ‘form-control’, ‘id’ => ‘country’, ‘placeholder’ => ‘Upiši državu’])}}
</div>
<div class=“modal-footer”>
<input type=“submit” id="#editDirectory" class=“btn btn-primary” value=“Ažuriraj”/>
<button type=“button” class=“btn btn-secondary” data-dismiss=“modal”>Zatvoriti</button>
</div>

U update funkciji, radis i update id-a, a on se ne mijenja, mislim da id moras maknuti iz update-a.

U funkciji update si ispisi vrijednosti koje ti dolaze.

Predlozio sam ti da si slozis xdebug, po peti puta, bez debugiranja se ne moze radit ozbiljan development.

Debugiraj i js.

<form action="" method="POST">
{!! csrf_field() !!}
<input type=“hidden” name=“item_id” id=“dir_id” value=""/>
@include(‘pages.admin.forms-admin.edit.edit-directory’)
{{–{!! Form::hidden(’_method’,‘PATCH’)!!}–}}
{!! Form::close() !!}

Na klik button-a ubaci i URL a ostavi ga ovako praznog na inicijalizaciji stranice.

Edit: imaš već method spoofing malo dalje u formi.