Multiple services of type App\CoreModule\Model\ArticleManager found: 01, 04
- popcorn
- Člen | 28
Ahoj, potřeboval bych odhalit, kde mám chybu. Háže mi to tento error: Service of type App\CoreModule\Presenters\ArticlePresenter: Multiple services of type App\CoreModule\Model\ArticleManager found: 01, 04 (needed by $articleManager in __construct())
ArticlePresenter mám:
<?php
namespace App\CoreModule\Presenters;
use App\CoreModule\Model\ArticleManager;
use App\Presenters\BasePresenter;
use Nette\Application\AbortException;
use Nette\Application\BadRequestException;
use Nette\Application\UI\Form;
use Nette\Database\UniqueConstraintViolationException;
use Nette\Utils\ArrayHash;
class ArticlePresenter extends BasePresenter
{
private $defaultArticleUrl;
private $articleManager;
public function __construct($defaultArticleUrl, ArticleManager $articleManager)
{
parent::__construct();
$this->defaultArticleUrl = $defaultArticleUrl;
$this->articleManager = $articleManager;
}
public function renderDefault($url = null)
{
if (!$url) $url = $this->defaultArticleUrl;
if (!($article = $this->articleManager->getArticle($url)))
$this->error();
$this->template->article = $article;
}
public function renderList()
{
$this->template->articles = $this->articleManager->getArticles();
}
public function actionRemove($url = null)
{
$this->articleManager->removeArticle($url);
$this->flashMessage('Článek byl úspěšně odstraněn.');
$this->redirect('Article:list');
}
public function actionEdtior($url = null)
{
if ($url) {
if (!($article = $this->articleManager->getArticle($url)))
$this->flashMessage('Článek nebyl nalezen.');
else $this->editorForm->setDefaults($article);
}
}
protected function createComponentEditorForm()
{
$form = new Form;
$form->addHidden('article_id');
$form->addText('title', 'Titulek')->setRequired();
$form->addText('url', 'URL')->setRequired();
$form->addText('description', 'Popisek')->setRequired();
$form->addTextArea('content', 'Obsah');
$form->addSubmit('save', 'Uložit článek');
$form->onSuccess[] = function (Form $form, ArrayHash $values) {
try {
$this->articleManager->saveArticle($values);
$this->flashMessage('Článek byl úspěšně uložen.');
$this->redirect('Article:', $values->url);
} catch (UniqueConstraintViolationException $e) {
$this->flashMessage('Článek s touto URL adresou již existuje.');
}
};
return $form;
}
}
?>
A ArticleManager:
<?php
namespace App\CoreModule\Model;
use App\Model\DatabaseManager;
use Nette\Database\Table\ActiveRow;
use Nette\Database\Table\Selection;
use Nette\Utils\ArrayHash;
class ArticleManager extends DatabaseManager
{
const
TABLE_NAME = 'article',
COLUMN_ID = 'article_id',
COLUMN_URL = 'url';
public function getArticles()
{
return $this->database->table(self::TABLE_NAME)->order(self::COLUMN_ID . ' DESC');
}
public function getArticle($url)
{
return $this->database->table(self::TABLE_NAME)->where(self::COLUMN_URL, $url)->fetch();
}
public function saveArticle($article)
{
if (empty($article[self::COLUMN_ID])) {
unset($article[self::COLUMN_ID]);
$this->database->table(self::TABLE_NAME)->insert($article);
} else
$this->database->table(self::TABLE_NAME)->where(self::COLUMN_ID, $article[self::COLUMN_ID])->update($article);
}
public function removeArticle($url)
{
$this->database->table(self::TABLE_NAME)->where(self::COLUMN_URL, $url)->delete();
}
}
?>
Editoval popcorn (25. 6. 2019 21:10)
- David Matějka
- Moderator | 6445
Nette načítá oba tyto konfigurační soubory. do common.neon dáváš věci, které jsou společné pro celou aplikaci bez ohledu na to, kde běží. local.neon pak obvykle není verzovaný a máš v něm věci, které jsou specifické pro aktuální běh aplikace – tedy většinou různé údaje k databázi apod.
- Marek Bartoš
- Nette Blogger | 1280
Btw, nehledej v tom žádnou magii. Oba konfigurační soubory si přidáváš v app/bootstrap.php do Configuratoru sám. Myšlenka těch dvou souborů je taková, že v config.local.neon budeš mít jen konfiguraci specifickou pro lokální server (typicky údaje k databázi) s tím, že při deployi daný soubor nahradíš konfigurací pro server, na který nasazuješ. Strukturu konfiguračních údajů si jinak můžeš udělat jak chceš. Já třeba používám následující
/config
/modules
admin.neon
front.neon
console.neon
/server
local.neon
production.neon
base.neon
Editoval Mabar (29. 6. 2019 9:08)