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
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
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
bud:
- dej
App
douse
- nebo ve
@var
dej pred nazev tridy\
, takze to bude@var \App\Components\IAdminControlFactory