Chyba Call to a member function getUrl() on null
- Isigarek
- Člen | 74
Zdravíčko. Omlouvám se předem za další téma vůči problému ale nevím co s tím. Stáhl jsem nové nette rozjel ho na localhostu. Když jsem přidal do HomepagePresenteru User class s tím jestli je uživatel nepřihlášen tak ho to hodí na jiný presenter tak nastala chyba:
Call to a member function getUrl() on null
Chyba se náléza zde:
Soubor: File: …\nette\application\src\Application\UI\Presenter.php:977
975: static $refUrl;
976: if ($refUrl === NULL) {
977: $refUrl = new Http\Url($this->httpRequest->getUrl());
978: $refUrl->setPath($this->httpRequest->getUrl()->getScriptPath());
979: }
HomepagePresenter:
namespace App\Presenters;
use Nette;
use App\Model;
use Nette\Security\User;
class HomepagePresenter extends BasePresenter
{
private $user;
public function __construct(User $user)
{
$this->user = $user;
if(!$this->user->isLoggedIn())
{
$this->redirect("Login");
}
}
public function renderDefault()
{
}
}
- David Matějka
- Moderator | 6445
kontrolu, zda je uzivatel prihlasen, provadej az v metode startup.
V konstruktoru pouze zpracuj zavislosti. A User si ani predavat nemusis, ten
je dostupny pres getUser()
- David Matějka
- Moderator | 6445
smaz ten konstruktor a private $user
, tu metodu getUser volej ve
startup. a nezapomen tam zavolat parent::startup()
, jinak to
bude rvat..
- David Matějka
- Moderator | 6445
viz zivotni cyklus presenteru, nette vola startup, kdyz uz je presenter spravne inicializovany a jsou tedy k dispozici vsechny zavislosti atd.
- Ondris
- Člen | 37
Ty jednotlivý metody presenteru jsou celkem dobře vysvětleny tady: https://doc.nette.org/…n/presenters#…
. Přímo u metody startup je uvedeno, že slouží pro ověření
uživatelského oprávnění. Je dobrý se toho držet.
Metoda parent::fcName volá fcName z předka, takže ano, pokud dědíš od
basePresenteru, tak volá ten.
Edit: pozdě.
Editoval Ondris (2. 11. 2015 17:15)
- David Matějka
- Moderator | 6445
@CZechBoY trochu jsem to zjednodusil, checkRequirements je uz taky ok :)