Webloader\InvalidArgumentException po upgradu na nette 2.2.3

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
James_Scott
Člen | 55
+
0
-

Ahoj, upgradoval jsem Nette na 2.2.3 a najednou mi vyhazuje vyjimku Webloader (konkretne toto hlasi Tracy:

258:        /**
259:         * @param callback $filter
260:         * @throws InvalidArgumentException
261:         */
262:        public function addFilter($filter)
263:        {
264:            if (!is_callable($filter)) {
265:                throw new InvalidArgumentException('Filter is not callable.');
266:            }
267:
268:            $this->filters[] = $filter;
269:        }

Ten Webloader vola TexylaLoader, ktery jsem nemenil –

		$files->addFiles(array(
			// core
			"texyla/js/texyla.js",
			"texyla/js/selection.js",
			"texyla/js/texy.js",
			"texyla/js/buttons.js",
			"texyla/js/dom.js",
			"texyla/js/view.js",
			"texyla/js/ajaxupload.js",
			"texyla/js/window.js",

			// languages
			"texyla/languages/cs.js",
			"texyla/languages/sk.js",
			"texyla/languages/en.js",

			// plugins
			"texyla/plugins/keys/keys.js",
			"texyla/plugins/resizableTextarea/resizableTextarea.js",
			"texyla/plugins/img/img.js",
			"texyla/plugins/table/table.js",
			"texyla/plugins/link/link.js",
			"texyla/plugins/emoticon/emoticon.js",
			"texyla/plugins/symbol/symbol.js",
			"texyla/plugins/files/files.js",
			"texyla/plugins/color/color.js",
			"texyla/plugins/textTransform/textTransform.js",
			"texyla/plugins/youtube/youtube.js",
			"texyla/plugins/gravatar/gravatar.js",

			"js/texyla-init.js",
		));

	    $compiler = \WebLoader\Compiler::createJsCompiler($files, __DIR__ . "/../../www/webtemp/");

		// setup filter
		$compiler->addFilter($filter);

Mohl by me nekdo nakopnout, co s tim? :)

petr.jirous
Člen | 128
+
0
-

Co ti obsahuje proměnná $filter?

James_Scott
Člen | 55
+
0
-

Promenna $filter se prijima v konstruktoru, tato metoda vola ten TexylaLoader

/**
	 * Texyla loader factory
	 * @return TexylaLoader
	 */
	protected function createComponentTexyla()
	{
		$baseUri = $this->context->httpRequest->url->baseUrl;
		$filter = new \WebLoader\Filter\VariablesFilter(array(
				"baseUri" => $baseUri,
				"previewPath" => $this->link("Texyla:preview"),
				"filesPath" => $this->link("Texyla:listFiles"),
				"filesUploadPath" => $this->link("Texyla:upload"),
				"filesMkDirPath" => $this->link("Texyla:mkDir"),
				"filesRenamePath" => $this->link("Texyla:rename"),
				"filesDeletePath" => $this->link("Texyla:delete"),
			));

		$texyla = new \TexylaLoader($filter, $baseUri . "webtemp");
		return $texyla;
	}
James_Scott
Člen | 55
+
0
-

A tady je dump $filter

Dumped variables
WebLoader\Filter\VariablesFilter #8f40
startVariable private => "{{$" (3)
endVariable private => "}}" (2)
variables private => array (7)
baseUri => "http://localhost/blog/www/" (26)
previewPath => "/blog/www/texyla/preview" (24)
filesPath => "/blog/www/texyla/list-files" (27)
filesUploadPath => "/blog/www/texyla/upload" (23)
filesMkDirPath => "/blog/www/texyla/mk-dir" (23)
filesRenamePath => "/blog/www/texyla/rename" (23)
filesDeletePath => "/blog/www/texyla/delete" (23)
Filip Procházka
Moderator | 4668
+
0
-

Upgradoval jsi jenom Nette nebo i Webloader?

Ta výjimka znamená, že to co tam předáváš jako $filter není callable. Callable znamená, že obsah proměnné jde zavolat jako funkce a předat tomu argumenty. Nastuduj si prosím jak funguje funkce is_callable.

A až to pochopíš, tak se sem vrať a a ukaž nám přesně co se předává do té metody addFilter, protože jsi nám ukázal pouze co se předává do TexylaLoader.

James_Scott
Člen | 55
+
+2
-

Tak tohle by snad mělo být ono – když to zakomentuji, tak se texyla normálně zobrazí.
Odkud by se měla brát ta statická JSMin:minify?

// minifying JS
60:            $compiler->addFilter("JSMin::minify");

Edit: Tak už jsem na to kápl, scházel mi tam celý soubor jsmin.php..
Díky za nakopnutí !

Editoval James_Scott (21. 10. 2014 14:38)