bootstrap.php verze 2.4 vs Bootstrap.php verze 3.0
- Allconius
- Člen | 317
Ahoj,
v bootstrap.php ve verzi 2.4 jsem měl přidánu registraci pro rozšíření
DatePicker:
<?php
require __DIR__ . '/../vendor/autoload.php';
RadekDostal\NetteComponents\DateTimePicker\DatePicker::register();
$configurator = new Nette\Configurator;
$configurator->enableTracy(__DIR__ . '/../log');
$configurator->setTimeZone('Europe/Prague');
$configurator->setTempDirectory(__DIR__ . '/../temp');
$configurator->createRobotLoader()
->addDirectory(__DIR__)
->register();
$configurator->addConfig(__DIR__ . '/config/config.neon');
$configurator->addConfig(__DIR__ . '/config/config.local.neon');
$container = $configurator->createContainer();
return $container;
?>
ale ve verzi 3.0 už je to řešené třídou:
<?php
declare(strict_types=1);
namespace App;
use Nette\Configurator;
class Bootstrap
{
public static function boot(): Configurator
{
$configurator = new Configurator;
$configurator->enableTracy(__DIR__ . '/../log');
$configurator->setTimeZone('Europe/Prague');
$configurator->setTempDirectory(__DIR__ . '/../temp');
$configurator->createRobotLoader()
->addDirectory(__DIR__)
->register();
$configurator->addConfig(__DIR__ . '/config/common.neon');
$configurator->addConfig(__DIR__ . '/config/local.neon');
return $configurator;
}
}
?>
kam mám to
„RadekDostal\NetteComponents\DateTimePicker\DatePicker::register();“ dát?
Bez toho mi to píše:
„Call to undefined method Nette\Application\UI\Form::addDatePicker()“
- Allconius
- Člen | 317
Pavel Kravčík napsal(a):
Do configu: https://github.com/…teTimePicker#…
Ahoj, to nepomůže, toto mám v common.neon:
<?php
parameters:
application:
errorPresenter: Error
mapping:
*: App\*Module\Presenters\*Presenter
session:
expiration: 14 days
autoStart: true
services:
router: App\Router\RouterFactory::createRouter
- App\Model\DbManager
extensions:
tbDatePicker: RadekDostal\NetteComponents\DateTimePicker\TbDatePicker\DI\TbDatePickerExtension
tbDatePicker:
format: j. n. Y
?>
je potřeba někam dát to „RadekDostal\NetteComponents\DateTimePicker\DatePicker::register();“ aby to fungovalo
- Pavel Kravčík
- Člen | 1196
Co znamená nepomůže? Cache si vyčistil po přidání extension? Composer update na tu novou verzi DP se povedl?
- Allconius
- Člen | 317
Pavel Kravčík napsal(a):
Co znamená nepomůže? Cache si vyčistil po přidání extension? Composer update na tu novou verzi DP se povedl?
jj cache jsem vyčistil a composer to nainstaloval OK „composer require radekdostal/nette-datetimepicker“:
composer require radekdostal/nette-datetimepicker
Warning: Module ‚openssl‘ already loaded in Unknown on line 0
Using version ^3.0 for radekdostal/nette-datetimepicker
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Nothing to install or update
Generating autoload files
Editoval Allconius (9. 8. 2019 9:16)
- Allconius
- Člen | 317
Taky úplně nechápu proč se musí ještě spouštět
DatePicker::register() když už je to v configu .....
Ale tady v tom příkladu to tam taky pouští:
https://github.com/…tePicker.php
Editoval Allconius (9. 8. 2019 9:24)
- Allconius
- Člen | 317
CZechBoY napsal(a):
Já bych to hodilo normálně do tý metody boot.
Ahoj, to jsem zkoušel, ale to mě ale vyhodí chybu 500:
<?php
declare(strict_types=1);
namespace App;
use Nette\Configurator;
class Bootstrap
{
public static function boot(): Configurator
{
RadekDostal\NetteComponents\DateTimePicker\DatePicker::register();
$configurator = new Configurator;
$configurator->enableTracy(__DIR__ . '/../log');
$configurator->setTimeZone('Europe/Prague');
$configurator->setTempDirectory(__DIR__ . '/../temp');
$configurator->createRobotLoader()
->addDirectory(__DIR__)
->register();
$configurator->addConfig(__DIR__ . '/config/common.neon');
$configurator->addConfig(__DIR__ . '/config/local.neon');
return $configurator;
}
}
?>
hodí:
Tato stránka nefunguje Web momentálně tento požadavek nemůže
zpracovat.
HTTP ERROR 500
Editoval Allconius (9. 8. 2019 10:17)
- Allconius
- Člen | 317
Ahoj, tak nakonec pomohlo dát to do /www/index.php:
<?php
declare(strict_types=1);
require __DIR__ . '/../vendor/autoload.php';
RadekDostal\NetteComponents\DateTimePicker\DatePicker::register();
App\Bootstrap::boot()
->createContainer()
->getByType(Nette\Application\Application::class)
->run();
?>
haluz teda :-D
- Martk
- Člen | 661
Když už tam dáváš absolutní adresu, tak to musí začínat zpětným
lomítkem:
\RadekDostal\NetteComponents\DateTimePicker\DatePicker::register();
,
protože teď ti to hledalo
třídu App\RadekDostal\NetteComponents\DateTimePicker\DatePicker::register();
Nefunguje ti to v configu, protože správný název extension třídy
je: RadekDostal\NetteComponents\DateTimePicker\DateTimePicker\DI\DateTimePickerExtension
Editoval Martk (9. 8. 2019 13:19)
- Allconius
- Člen | 317
Martk napsal(a):
Když už tam dáváš absolutní adresu, tak to musí začínat zpětným lomítkem:
\RadekDostal\NetteComponents\DateTimePicker\DatePicker::register();
, protože teď ti to hledalo tříduApp\RadekDostal\NetteComponents\DateTimePicker\DatePicker::register();
Nefunguje ti to v configu, protože správný název extension třídy je:
RadekDostal\NetteComponents\DateTimePicker\DateTimePicker\DI\DateTimePickerExtension
Ahoj, toto mi taky nefunguje:
<?php
extensions:
tbDatePicker: RadekDostal\NetteComponents\DateTimePicker\DateTimePicker\DI\DateTimePickerExtension
?>
nějak to co je v tom configu ignoruje a pouští to jen přes ten register() nemá to být v tom configu ještě nějak jinak ?
- Allconius
- Člen | 317
Martk napsal(a):
Když už tam dáváš absolutní adresu, tak to musí začínat zpětným lomítkem:
\RadekDostal\NetteComponents\DateTimePicker\DatePicker::register();
, protože teď ti to hledalo tříduApp\RadekDostal\NetteComponents\DateTimePicker\DatePicker::register();
změnil jsem alespoň ten register a dal ho do Bootstrap.php s lomítkem, to je lepší než mít to v index.php, díky
- Allconius
- Člen | 317
radas napsal(a):
Ahoj,
metodu register() použiješ jen v případě, kdy nemáš MVC aplikaci. Jinak stačí konfigurace v neon souboru.
Ahoj, já právě mám MVC aplikaci, nový projekt s nette 3, ale pokud to
mám jen v common.neon tak to píše:
„Call to undefined method Nette\Application\UI\Form::addDatePicker()“
aby to fungovalo tak tam musím dát ten register() do Bootstrap.php
- Allconius
- Člen | 317
radas napsal(a):
To je zvláštní. Taky ho používám s Nette 3 MVC aplikacemi a bez problémů konfigurace jen v config.neon. Je pravda, že používám původní bootstrap.php, nikoliv třídu Bootstrap. Zkusím se na to podívat.
Udělal jsem to takto:
- composer create-project nette/web-project nette-blog
- cd nette-blog
- composer require radekdostal/nette-datetimepicker
- common.neon:
<?php
parameters:
application:
errorPresenter: Error
mapping:
*: App\*Module\Presenters\*Presenter
session:
expiration: 14 days
services:
router: App\Router\RouterFactory::createRouter
extensions:
tbDatePicker: RadekDostal\NetteComponents\DateTimePicker\TbDatePicker\DI\TbDatePickerExtension
tbDatePicker:
format: j. n. Y
?>
5. HomepagePresenter.php:
<?php
declare(strict_types=1);
namespace App\Presenters;
use Nette;
use Nette\Application\UI\Form;
final class HomepagePresenter extends Nette\Application\UI\Presenter
{
protected function createComponentNovyForm()
{
$form = new Form;
// group Personal data
//$form->setRenderer(new Bootstrap());
$form->addProtection();
$form->addGroup();
$form->addText('jmeno', 'Jméno:')
->setRequired('Zadejte Vaše jméno');
$form->addDatePicker('datumod', 'Od:', 10)
->setDefaultValue('01.01.2019')
->setReadOnly(FALSE)
->setRequired(TRUE)
->addRule(Form::RANGE, NULL, array(new DateTime('2013-01-01'), new DateTime('2019-12-31')))
->setAttribute('size', 10);
}
}
?>
6. default.latte:
<?php
{block content}
{control novyForm}
?>
7. delete cache
8. /nette-blog/www/:
"Nette\MemberAccessException
Call to undefined method Nette\Application\UI\Form::addDatePicker()"
- Ondřej Kubíček
- Člen | 494
v tom examplu na githubu – https://github.com/…teTimePicker
se ten input jmenuje addTbDatePicker
,
ne addDatePicker
- Allconius
- Člen | 317
Ondřej Kubíček napsal(a):
v tom examplu na githubu – https://github.com/…teTimePicker se ten input jmenuje
addTbDatePicker
, neaddDatePicker
Ahoj, je tam více typů, ten addDatePicker je tady: https://github.com/…tePicker.php
- nightfish
- Člen | 519
@Allconius Registrace extension v config.neon musí odpovídat tomu, co pak používáš.
Pro addTbDatePicker()
zaregistruješ:
extensions:
tbDatePicker: RadekDostal\NetteComponents\DateTimePicker\TbDatePicker\DI\TbDatePickerExtension
Pro addDatePicker()
zaregistruješ:
extensions:
datePicker: RadekDostal\NetteComponents\DateTimePicker\DatePicker\DI\DatePickerExtension
- Allconius
- Člen | 317
nightfish napsal(a):
@Allconius Registrace extension v config.neon musí odpovídat tomu, co pak používáš.
Pro
addTbDatePicker()
zaregistruješ:extensions: tbDatePicker: RadekDostal\NetteComponents\DateTimePicker\TbDatePicker\DI\TbDatePickerExtension
Pro
addDatePicker()
zaregistruješ:extensions: datePicker: RadekDostal\NetteComponents\DateTimePicker\DatePicker\DI\DatePickerExtension
super, funguje, to je přesně to co jsem potřeboval vědět, díky moc ! :-)