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
+
0
-

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
+
+2
-

Zaměň $this->cachedDatabaseRouterHelper->filterIn za [$this->cachedDatabaseRouterHelper, 'filterIn'] a podobně i $this->cachedDatabaseRouterHelper->filterOutArticle.

CZechBoY
Člen | 3608
+
0
-

pripadne obal volani do anonymni funkce

function(parametry) {
  zavolani funkce(parametry)
}