Jak správně připojit extension k Nette pomocí composeru?
- 2rec
- Člen | 40
Pokouším se dostat do mého sandboxu doplňek Plupload od JedenWeb , ale neustále se mi vypisuje chyba Class ‚JedenWeb\Plupload\DI\PluploadExtension‘ not found. Potřeboval bych prosím radu, co dělám špatně nebo co ještě musím udělat.
Můj postup:
- stáhnu si nový projekt (composer create-project nette/sandbox test)
- změním composer.json v projektu na
{
"name": "nette/sandbox",
"description": "The sandbox is a pre-packaged Nette Framework project, basic configured structure for your application.",
"homepage": "https://nette.org",
"type": "project",
"license": ["BSD-3-Clause", "GPL-2.0", "GPL-3.0"],
"authors": [
{
"name": "David Grudl",
"homepage": "http://davidgrudl.com"
},
{
"name": "Nette Community",
"homepage": "https://nette.org/en/contributors?lang=en"
}
],
"require": {
"php": ">= 5.4.0",
"nette/nette": "dev-master",
"dg/adminer-custom": "1.*",
"jedenweb/plupload": "dev-master",
"vojtech-dobes/extensions-list": "dev-master"
},
"require-dev": {
"nette/tester": "@dev"
}
}
- a zavolám composer update
- pak přidám do bootstrap.php tyhle řádky, aby se zprovoznilo extension list , což nejspíš Plupload extension vyžaduje
$configurator->onCompile[] = function ($configurator, $compiler) {
$compiler->addExtension('extensions', new VojtechDobes\ExtensionsList);
};
- pak přidám danou extension do config.neon
extensions:
plupload: JedenWeb\Plupload\DI\PluploadExtension
- a to je vše
Když si zobrazím můj web, objeví se Laděnka/Tracy a hlásí chybu Class ‚JedenWeb\Plupload\DI\PluploadExtension‘ not found. Měl bych ještě někam napsat, kde má nette hledat potřebné třídy? Kam?
Editoval 2rec (14. 12. 2013 22:39)
- 2rec
- Člen | 40
enumag napsal(a):
To nedává smysl. Proč to hledá třídu ImagesExtension když se to jmenuje PluploadExtension?
Zkoušel jsem tam nahrát i ImagesExtension, pravděpodobně jsem zkopíroval chybu ze špatného tabu. Opraveno. Každopádně, chyba je u obou pořád ta samá. Věděl bys, co dělám špatně?
- 2rec
- Člen | 40
enumag napsal(a):
No ono totiž to extension je blbě. V composer.json úplně chybí konfigurace autoloadingu.
EDIT: Což se koukám týká i ostatních doplňků od JedenWeb. Autor zřejmě nechápe, že composer packages se nemají spoléhat na RobotLoader.
A mohl bych to nějak napravit? Momentálně jsem docela bezradný i nadále.
- enumag
- Člen | 2118
https://github.com/…pload/pull/1
Totéž je třeba udělat pro všechny ostatní doplňky od JedenWeb.
Editoval enumag (14. 12. 2013 23:08)
- 2rec
- Člen | 40
Bohužel se mi objevila další, jiná chyba a taky souvisí s nenalezenými třídami – Class ‚Nette\DI\CompilerExtension‘ not found – to si nejspíš volá rozšíření extension list, protože když z bootstrap.php odstraním řádky, které jsem tam vložil, abych to zprovoznil (v prvním příspěvku), píše to chybu Found sections ‚extensions‘ in configuration, but corresponding extensions are missing.
Akorát tento autor ve svém composer.json souboru má i autoloader.
Editoval 2rec (14. 12. 2013 23:57)
- 2rec
- Člen | 40
Je nějaká možnost, jak stáhnout 2.1 přes composer? Command composer
create-project nette/sandbox test stahuje vždycky starší verzi.
Co kdybych nepoužil composer a všechno to stáhnul ručně? Našel by to
autoloader sám a uměl použít správně?
Nebo by bylo lepší najít jiné řešení? Já už bych rád pracoval, ale pořád se morduju s tím, že bych rád měl nějaký multiple file uploader, který už umí i zpracování dat a nemusel bych ho psát já od začátku. Stačil by mi nejlépe i obyčejný html5 a pár funkcí pro uložení a zobrazení nahraných obrázků. Nicméně nic lepšího než plupload jsem nenašel (a ten mi dělá takové trable).
EDIT: Když jsem to nahrál ručně do Nette verze 2.1.0RC3, zobrazila se znovu chyba Class ‚JedenWeb\Plupload\DI\PluploadExtension‘ not found
EDIT2: A tu chybu to vyhazuje vždycky při
class ExtensionsExtension extends Nette\DI\CompilerExtension
23: {
24:
25: public function loadConfiguration()
26: {
27: foreach ($this->getConfig() as $name => $class) {
28: $this->compiler->addExtension($name, new $class);
29: }
30: }
31:
32: }
Editoval 2rec (15. 12. 2013 0:38)
- enumag
- Člen | 2118
Koukám že neumíš pracovat s composerem. Četls jeho dokumentaci?
- Sandbox pro Nette 2.1
composer create-project nette/sandbox test dev-release-2.1.x
Projekt se vytvoří ale hodí to chybu protože Nette 2.1 ještě není vydané. Zatím je jen RC verze.
- Chybu opravíme drobnou modifikací composer.json ve vytvořeném projektu
"nette/nette": "dev-release-2.1.x",
Na začátku není dobrý nápad používat neověřené doplňky. Nette podporu pro upload více souborů přes HTML5 má (i když možná až ve 2.1).
EDIT: Plupload zatím neinstaluj, počkej než autor mergne ten můj PR. Do té doby nebude fungovat (leda přes RobotLoader ale to je fuj).
Editoval enumag (15. 12. 2013 1:17)
- enumag
- Člen | 2118
A nešlo by to čekání nějak obejít?
Samozřejmě šlo, jen jsou to už poněkud pokročilé věci. Napadají mne dva způsoby:
- Použít vlastní (v tomto případě můj) repozitář
{
"require": {
"jedenweb/plupload": "dev-patch-1"
},
"repositories": [
{
"type": "vcs",
"url": "https://github.com/enumag/plupload"
}
]
}
Tento způsob je lepší protože ti umožňuje opravovat libovolné chyby a navíc tím otestuješ že fix je opravdu správný. Patch jsem psal z hlavy a netestoval jsem jej takže tam může být něco špatně.
- Přidání složky do autoloaderu úpravou vlastního composer.json
"autoload": {
"psr-0": {
"JedenWeb\\Plupload\\": "vendor/jedenweb/plupload/src/"
}
}
Bude nutné zavolat composer install
.
Tohle jsem sám nikdy nezkoušel ale teoreticky by to mohlo fungovat.
- 2rec
- Člen | 40
Vypadá to, že se neumí dostat na tvůj účet a takhle si to stáhnout. Zkoušel jsem i fork na sebe, ale chybu to psalo stejnou.
[RuntimeException]
Failed to clone https://github.com/enumag/plupload.git via git, https proto
cols, aborting.
- git://github.com/enumag/plupload.git
fatal: remote error:
Repository not found.
- https://github.com/enumag/plupload.git
remote: Repository not found.
fatal: Authentication failed for 'https://github.com/enumag/plupload.git/
- 2rec
- Člen | 40
Tyjo, konečně to opravdu funguje. :-) Děkuju, že ses mi věnoval a našel tu chybu, sám bych jenom pár dní tápal a pak to vzdal.
Jen jestli bys mi mohl poradit ještě s jednou věcí. Ono se to teď celé rozchodilo, nicméně ten plugin samotný vyžaduje nalinkování jQuery a jQuery UI. Teď mi to vypisuje chybu There is no support for any of these: html5 a řekl bych, že to znamená, že je tam dávám špatně. Dal jsem do layoutu tohle
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8/jquery.min.js"></script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min.js"></script>
Doufal jsem, že to bude stačit, protože stažení celého jQuery UI mi udělalo 3 složky (css,js,development-bundle) a u nich nevím, kam co vkládat, aby to bylo správně. A v Readme Puploadu se píše akorát, abych je nezapomněl nalinkovat, ne jak to udělat.
EDIT:
nalinkování js souborů ze složky js toho staženého jQuery UI taky
nestačí.
<script type="text/javascript" src="{$basePath}/js/jquery-ui-1.10.3.custom.js"></script>
<script type="text/javascript" src="{$basePath}/js/jquery-1.9.1.js"></script>
Ve fórech nikde není řešení, akorát lidi třeba napíšou, že to už mají nebo že to vzdali. Snad jednou budou moct hledat v tomhle příspěvku a najdou pomoc.
EDIT2:
Taktéž nalinkování souborů ze složky www/mfu/js nepomáhá
<script src="{$basePath}/mfu/js/jquery.ui.plupload.js"></script>
<script src="{$basePath}/mfu/js/plupload.full.js"></script>
Editoval 2rec (15. 12. 2013 12:17)
- Filip Procházka
- Moderator | 4668
Na ty csska a javascripty by jsi měl raději použít WebLoader, než je někam kopírovat nebo to jakkoliv jinak komplikovat.
- 2rec
- Člen | 40
enumag napsal(a):
No tu chybu to vypisuje tady. Jak na to koukám tak je to akorát div, jehož obsah (ta chyba) má být přepsána pomocí javascriptu na reálný element. K tomu z nějakého důvodu nedošlo takže si v browseru otevři konzoli a podívej se proč JS spadnul.
V konzoli jsem se dočetl o několika chybách:
ReferenceError: jQuery is not defined
}(window, document, plupload, jQuery)); /mfu/js/jquery.ui.plupload.js (line 378)
ReferenceError: $ is not defined
$(document).ready(function() { /test/www/ (line 27)
TypeError: g.widget is not a function
},destroy: function() { /mfu/js/jquery.ui.plupload.js (line 362)
Takže nejspíš fakt špatně načítám jQuery nebo jQuery UI. Ale jak (zatím bez WebLoaderu) to mám teda správně nainstalovat? Momentálně mám skripty v @layout.latte v bloku scripts a všechny, které načítám, jsou na místech, kde uvádím.
<script type="text/javascript" src="{$basePath}/js/jquery.js"></script>
<script type="text/javascript" src="{$basePath}/js/netteForms.js"></script>
<script type="text/javascript" src="{$basePath}/js/main.js"></script>
<script type="text/javascript" src="{$basePath}/mfu/js/jquery.ui.plupload.js"></script>
<script type="text/javascript" src="{$basePath}/mfu/js/plupload.full.js"></script>
Když přidám i
<script type="text/javascript" src="{$basePath}/js/jquery-ui-1.10.3.custom.js"></script>
a
<script type="text/javascript" src="{$basePath}/js/jquery-1.9.1.js"></script>
,
které jsem stáhnul z http://jqueryui.com/download/ zmizí chyba TypeError:
g.widget is not a function a místo ní se objeví více chyb
ReferenceError: jQuery is not defined.
- 2rec
- Člen | 40
Tak jsem našel odpověď. stackoverflow
Jako první se musí načíst jQuery a jQuery UI, dělám to pomocí
<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.5.1.min.js"></script>
<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jquery.ui/1.8.10/jquery-ui.min.js"></script>
Dále dělá problémy jQuery od Nette, takže
zakomentovat/smazat <script type="text/javascript" src="{$basePath}/js/jquery.js"></script>
Budu se s tím teď pokoušet nějak pracovat, kdyby se vyskytly problémy (a momentálně tam po uploadu souborů mám jakousi chybovou hlášku Upload URL might be wrong or doesn't exist, nejspíš se to snaží rovnou vykreslit uploadované obrázky), ještě sem pro další generace něco napíšu.
Děkuju mockrát za pomoc při řešení problému.
Editoval 2rec (15. 12. 2013 15:11)