Při odeslání formuláře se nepošle get

martinzi
Člen | 6
+
0
-

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.

martinzi
Člen | 6
+
0
-

Děkuji @galab, už to funguje. Někdy mě štve, že to řeším tak dlouho a přitom je to taková blbost.