Nejde se dostat ke komponentě

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

Ahoj, doufám že mi nějaká hodná duše poradí :)

Vyskakuje mi chyba

Class or interface 'App\Presenters\App\Components\IAdminControlFactory' used in @var annotation at App\Presenters\AdminPresenter::$AdminControlFactory not found. Check annotation and 'use' statements.

Vím, že je špatná cesta App\Presenters\App\Components\IAdminControlFactory, ale nevím, jak to opravit.

AdminPresenter.php

<?php

namespace App\Presenters;

use Nette;

class AdminPresenter extends BasePresenter {

    /**
     * @var App\Components\IAdminControlFactory
     * @inject
     */
    public $AdminControlFactory;

	...

	public function createComponentLinesListGrid() {
        return $this->AdminControlFactory->createlinesListGrid();
    }

IAdminControlFactory.php

<?php

namespace App\Components;

interface IAdminControlFactory {

    /**
     * @return \App\Components\UI\LinesListGrid
     */
    function create();
}

LinesListGrid.php

<?php

namespace App\Components\UI;

use Nette;
use Ublaboo\DataGrid\DataGrid;
use Nette\Application\UI\Control;

class LinesListGrid extends Control {

    /** @var Nette\Database\Context */
    protected $db;

    public function __construct(Nette\Database\Context $database) {
        $this->db = $database;
    }

    public function render() {
        $this->template->render(__DIR__ . '/lines_control.latte');
    }

    public function createComponentLinesListGrid($name) {
        $grid = new DataGrid($this, $name);
        $grid->setDataSource($this->db->select("*")->from("users"));
        $grid->addColumnText("username", "Jméno");
    }

}

lines_control.latte

{control simpleGrid}

config.neon

services:
	router: App\RouterFactory::createRouter
	- App\Model\UserManager
	- App\Forms\SignFormFactory
	- App\Forms\RegisterFormFactory
	IAdminControlFactory: App\Components\IAdminControlFactory

app\presenters\templates\Admin\linesList.latte

{block title}
Admin
{/block}

{block content}
<div class="container">
    {control linesListGrid}

</div>
{/block}
Pavel Kravčík
Člen | 1196
+
0
-

Lomítko na začátku by mělo pomoci.

App\Presenters\App\Components\IAdminControlFactory

Z tohohle je to docela zřetelné, pokud ne – zkus si přečíst něco o namespace v PHP.

David Matějka
Moderator | 6445
+
0
-

bud:

  • dej App do use
  • nebo ve @var dej pred nazev tridy \, takze to bude @var \App\Components\IAdminControlFactory