RouterFactory, https, static a použití $this (Fatal Error: Using $this when not in object context)
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- ludek
- Člen | 83
Zdravím, na jednom serveru jsem zprovoznil SSL od Let's Encrypt.
Pokud si přeju výhradně HTTPS (Secure), Apache všechno přesměrovává,
ale aplikace v Nette 2.3 hlásí smyčku v přesměrování. Je třeba
upravit Router přidáním
Route::$defaultFlags = Route::SECURED;
.
Jenže na lokálu ssl nemám a chtěl bych, aby se HTTPS použilo podle toho.
Upravím si RouterFactory, ale protože je STATIC, nemůžu použít $this:
// file: ../app/router/RouterFactory.php
class RouterFactory
{
/**
* @return Nette\Application\IRouter
*/
public static function createRouter()
{
if($this->httpRequest->isSecured()) { // << Fatal Error: Using $this when not in object context
Route::$defaultFlags = Route::SECURED;
}
$router = new RouteList;
$router[] = new Route('<presenter>/<action>[/<id>]', 'Homepage:default');
return $router;
}
}
Mohl bych prosím dostat radu, jak to přepsat, abych zajistil, že to bude
fungovat podle toho, jestli zadám http nebo https?
Dík.
- Felix
- Nette Core | 1197
Pohodlne muzes zmenit RouterFactory
na plnohodnotnou sluzbu
zaregistrovanou pres neon.
class RouterFactory
{
private $httpRequest;
public function __construct(Nette\Http\Request $request) {
$this->httpRequest = $request;
}
/**
* @return Nette\Application\IRouter
*/
public function create()
{
if($this->httpRequest->isSecured()) {
Route::$defaultFlags = Route::SECURED;
}
$router = new RouteList;
$router[] = new Route('<presenter>/<action>[/<id>]', 'Homepage:default');
return $router;
}
}
services:
- RouterFactory
router:
create: @RouterFactory::create()
- David Grudl
- Nette Core | 8218
public static function createRouter(Nette\Http\Request $httpRequest)
{
if ($httpRequest->isSecured()) {
Route::$defaultFlags = Route::SECURED;
}