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 | 8285
 
Zaměň $this->cachedDatabaseRouterHelper->filterIn za
[$this->cachedDatabaseRouterHelper, 'filterIn'] a podobně i
$this->cachedDatabaseRouterHelper->filterOutArticle.