bootstrap.php verze 2.4 vs Bootstrap.php verze 3.0

Allconius
Člen | 313
+
0
-

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 | 313
+
0
-

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 | 1180
+
0
-

Co znamená nepomůže? Cache si vyčistil po přidání extension? Composer update na tu novou verzi DP se povedl?

https://github.com/…xtension.php#L43

Allconius
Člen | 313
+
0
-

tady jsem to řešil u 2.4: https://forum.nette.org/…tetimepicker

Allconius
Člen | 313
+
0
-

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?

https://github.com/…xtension.php#L43

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 | 313
+
0
-

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)

CZechBoY
Člen | 3608
+
0
-

Já bych to hodilo normálně do tý metody boot.

Allconius
Člen | 313
+
0
-

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 | 313
+
0
-

našel jsem že se to nějak řešilo i tady: https://forum.nette.org/…ker-do-formu

Allconius
Člen | 313
+
0
-

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 | 651
+
0
-

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 | 313
+
0
-

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ří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

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 | 313
+
0
-

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řídu App\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

radas
Člen | 220
+
+1
-

Ahoj,
metodu register() použiješ jen v případě, kdy nemáš MVC aplikaci. Jinak stačí konfigurace v neon souboru.

Allconius
Člen | 313
+
0
-

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

radas
Člen | 220
+
0
-

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.

Allconius
Člen | 313
+
0
-

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:

  1. composer create-project nette/web-project nette-blog
  2. cd nette-blog
  3. composer require radekdostal/nette-datetimepicker
  4. 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
+
+1
-

v tom examplu na githubu – https://github.com/…teTimePicker se ten input jmenuje addTbDatePicker, ne addDatePicker

Allconius
Člen | 313
+
0
-

Ondřej Kubíček napsal(a):

v tom examplu na githubu – https://github.com/…teTimePicker se ten input jmenuje addTbDatePicker, ne addDatePicker

Ahoj, je tam více typů, ten addDatePicker je tady: https://github.com/…tePicker.php

nightfish
Člen | 468
+
+2
-

@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 | 313
+
0
-

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 ! :-)