Při odeslání formuláře se nepošle get
- martinzi
- Člen | 6
Zdravím všechny,
řeším již déle a ve více presenterech ten samý problém, tak jsem si řekl, že sem napíši.
Snažím se udělat stránku editace profilu:
private $editedProfileId;
public function renderEdit(int $profileId = null): void
{
if($profileId == null){
$this->error();
}
$this->template->profile = $this->database
->table("u_users")
->get($profileId);
$this->editedProfileId = $profileId;
}
Následně mám formulář s prapodivným získáním Id uživatele, kde je mým cílem dosáhnout získání id a doplnit hodnoty. Problém je, že ten způsob získání id přes url funguje, ale vím že je to celé špatně, a tak zkouším předat id z render funkce. Při načtení vše funguje, avšak po odeslání formuláře mi vyhodí chybu – Trying to get property ‚username‘ of non-object. Když si zkouším vypsat hodnotu id přes konzoli, vyhodí mi jen null. Tedy dotaz zní, jak mohu inteligentním způsobem dostat id i po odeslání formu?
Formulář:
protected function createComponentEditProfileForm(): Form
{
// $httpRequest = $this->getHttpRequest();
// $url = $httpRequest->getUrl();
// $url = strval($url);
// $url = explode('=', $url);
// $profileId = end($url);
$user = $this->database
->table("u_users")
->get($this->editedProfileId);
// ->get($profileId);
$roles_db = $this->database
->table("u_roles");
$form = new Form;
$form->addText('username', 'Uživatelské jméno')
->setDefaultValue($user->username)
->setHtmlAttribute("id", "username")
->setHtmlAttribute("class", "form-control");
$form->addText('fullname', 'Celé jméno')
->setDefaultValue($user->fullname)
->setHtmlAttribute("class", "form-control")
->setHtmlAttribute("id", "fullname");
$form->addText('nickname', 'Přezdívka')
->setDefaultValue($user->nickname)
->setHtmlAttribute("class", "form-control")
->setHtmlAttribute("id", "nickname");
$roles = [];
foreach($roles_db as $role){
$new_array = array($role->name => $role->name);
$roles = array_merge($roles, $new_array);
}
$rolesArr = explode(', ', $user->role);
$form->addMultiSelect('roles', 'Země:', $roles)
->setDefaultValue($rolesArr);
$form->addText('email', 'Email')
->setDefaultValue($user->email)
->setHtmlAttribute("class", "form-control")
->setHtmlAttribute("id", "email");
$form->addText('telephone', 'Telefon')
->setDefaultValue($user->telephone)
->setHtmlAttribute("class", "form-control")
->setHtmlAttribute("id", "telephone");
$form->addText('adress', 'Adresa')
->setDefaultValue($user->adress)
->setHtmlAttribute("class", "form-control")
->setHtmlAttribute("id", "adress");
$form->addUpload("profileImg")
->setHtmlAttribute("class", "form-control-file")
->setHtmlAttribute("id", "file");
$form->addSubmit('send', 'Odeslat')
->setHtmlAttribute("class", "btn btn-primary btn-default");
$form->onSuccess[] = [$this, 'EditProfileFormSucceeded'];
return $form;
}
public function EditProfileFormSucceeded(\stdClass $values): void
{
$httpRequest = $this->getHttpRequest();
$url = $httpRequest->getUrl();
$url = strval($url);
$url = explode('=', $url);
$postId = end($url);
$rolesArr = $values->roles;
$rolesStr = implode(', ', $rolesArr);
$this->database->query('UPDATE users SET', [
'username' => $values->username,
'fullname' => $values->fullname,
'nickname' => $values->nickname,
'role' => $rolesStr,
'email' => $values->email,
'telephone' => $values->telephone,
'adress' => $values->adress,
], 'WHERE id = ?', $postId);
$this->redirect('Profile:all');
}
Děkuji předem za nápady.