Case mismatch on class name po přechodu na Nette 2.3
- BuMoRi
- Člen | 109
Ahoj, snažím se jednu aplikaci postavenou na 2.0 postupně migrovat na
novější verze Nette.
Ve verzi 2.3 jsou nově presentery a routy case sensitive.
Mám takovouto strukturu:
app
adminModule
model
presenters
templates
phonesModule
portalModule
Názvy presenteru:
homePresenter.php
Obsah presenterů:
namespace portalModule;
class homePresenter {}
Routa:
$container->router[] = new Route('<module=index>/<presenter=index>/<action=default>/<id=>', array(), Route::SECURED);
V configu není uvedeno mapování, takže předpokládám, že se
používá nějaké výchozí.
Do verze 2.2 vše OK, nyní chyba:
User Warning
Case mismatch on class name 'PortalModule\HomePresenter', correct name is 'portalModule\homePresenter'
Čím vlastně vzniká tato chyba, když mám ve skutečnosti vše malym písmem…
- David Matějka
- Moderator | 6445
ahoj, musel bys upravit filtry na routě pro presenter parametr, aby to převádělo na tvé názvy. ale jak píše @kocourPB – bude lepší, když přejmenuješ ty třídy a ns
- BuMoRi
- Člen | 109
Díky za reakci.
Jak už jsem psal, mapping v configu není vůbec.
S velkými písmeny souhlasim a na nový projektech to tak dělám. Tento
starý je holt napsaný takto a má spoustu modulů a presenterů, takže bych
to rád vyřešil bez přepsání začátečních písmen…
Edit: reagoval jsem jen na kocoura. S těma filtrama by to teda šlo? Přiznám
se že vůbec netuším, jak by se to udělalo…
Editoval BuMoRi (30. 4. 2019 13:46)
- David Matějka
- Moderator | 6445
@BuMoRi pro jednotlive parametry v route muzes definovat FILTER_IN a FILTER_OUT funkce, ktery jej transformuji mezi URL hodnotou a hodnotou aplikacniho requestu, viz https://doc.nette.org/…tion/routing#…
pro presenter a module existuji defaultni filtry presenter2path a path2presenter, viz https://github.com/…rs/Route.php, takze muzes u rout definovat vlastni filtry
- BuMoRi
- Člen | 109
Ahoj, takže podle rady Davida jsem to udělal takto:
Je to takto OK? Jde mi o to, abych mohl ponechat malá písmena na začátku
presenterů, tříd a modulů.
A ještě otázka: samostatné komponenty (např. formuláře, renderery apod)
by to ovlivnit nemělo, že? Ty mi totiž nefungují (Call to undefined
method).