Accessing methods as properties via $obj->filterIn is deprecated in RouterFactory.php
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- motorcb
- Člen | 552
Zdravím,
aktualizoval jsem Nette 2.4 a mám problém s routerem…
Accessing methods as properties via $obj->filterIn is deprecated in /app/router/RouterFactory.php:51
RouterFactory.php
<?php
declare(strict_types=1);
namespace App;
use App;
use Nette;
use Nette\Application\Routers\Route;
use Nette\Application\Routers\RouteList;
/**
* Router factory.
*/
class RouterFactory
{
use Nette\StaticClass;
/** @var App\Router\CachedDatabaseRouterHelper */
private $cachedDatabaseRouterHelper;
public function __construct(App\Router\CachedDatabaseRouterHelper $cachedDatabaseRouterHelper)
{
$this->cachedDatabaseRouterHelper = $cachedDatabaseRouterHelper;
}
/**
* @return \Nette\Application\IRouter
*/
public function createRouter()
{
$router = new RouteList();
$router[] = new Route('sitemap.xml', 'Front:Homepage:sitemap');
$router[] = new Route('rss.xml', 'Front:Homepage:rss');
//novinka novinka/2-titulek
$router[] = new Route('novinka/<id [0-9]+[a-z\-0-9]+>', [
'module' => 'Front',
'presenter' => 'Article',
'action' => 'detail',
'id' => [
Route::FILTER_IN => $this->cachedDatabaseRouterHelper->filterIn,
Route::FILTER_OUT => $this->cachedDatabaseRouterHelper->filterOutArticle,
],
]);
return $router;
}
}
CachedDatabaseRouterHelper.php:
<?php
declare(strict_types=1);
namespace App\Router;
use App;
use Nette;
class CachedDatabaseRouterHelper
{
use Nette\SmartObject;
/** @var App\Model\Repository\Article */
protected $repositoryArticle;
protected $cache;
public function __construct(App\Model\Repository\Article $repositoryArticle)
{
$this->repositoryArticle = $repositoryArticle;
$storage = new Nette\Caching\Storages\FileStorage(__DIR__ . '/../../temp');
$this->cache = new Nette\Caching\Cache($storage, 'CachedDatabaseRouterHelper');
}
/**
* Convert id-string-stroing to id
* @param string $param ID-bla-bla-bla
* @return int ID ID prvni ID
*/
public function filterIn($param)
{
$arrayParam = explode('-', $param);
return @$arrayParam[0];
}
/**
* Convert article ID to id-article-title
* @param int $param ID
* @return string id-article-title
*/
public function filterOutArticle($articleId)
{
$articleEntity = $this->repositoryArticle->find($articleId);
if ($articleEntity !== null) {
return $articleEntity->getId() . '-' . Nette\Utils\Strings::webalize($articleEntity->getTitle());
} else {
return $articleId;
}
}
}
Kde dělám chybu? Nebo jak to opravit?
Díky
- David Grudl
- Nette Core | 8282
Zaměň $this->cachedDatabaseRouterHelper->filterIn
za
[$this->cachedDatabaseRouterHelper, 'filterIn']
a podobně i
$this->cachedDatabaseRouterHelper->filterOutArticle
.