přechod na na verzi 2.0 ->nenalezená třída

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
masterr
Začátečník | 141
+
0
-

Fatal error: Class ‚Environment‘ not found in /DISK2/www/neco/app/bootstrap.php on line 25

Původně jsem měl verzi 1.0 jen jsem v libs nahradil současnou složku Nette za tu složku z nette 2.0alpha + jsem smazal temp.

Ta třída tam normálně je, čim to je?

Můj bootstrap.php:

require LIBS_DIR . '/Nette/loader.php';



Environment::loadConfig();


$application = Environment::getApplication();
$application->catchExceptions = FALSE;

// Step 3: Configure application
// 3a) get and setup a front controller
$application = Environment::getApplication();
$application->errorPresenter = 'Error';
//$application->catchExceptions = TRUE;
dibi::connect(Environment::getConfig('database'));


// Step 4: Setup application router
$router = $application->getRouter();

// mod_rewrite detection
if (function_exists('apache_get_modules') && in_array('mod_rewrite', apache_get_modules())) {
	$router[] = new Route('index.php', array(
		'module' => 'Front',
		'presenter' => 'Default',
	), Route::ONE_WAY);

	$router[] = new Route('<presenter>/<action>/<id>', array(
		'presenter' => 'Front:Default',
		'action' => 'default',
		'id' => NULL,
	));

} else {
	$router[] = new SimpleRouter('Front:Default:default');
}



FormContainer::extensionMethod('FormContainer::addCheckboxList', array('CheckboxList', 'addCheckboxList'));


    Debug::enable(Debug::DEVELOPMENT);
Environment::setMode(Environment::DEVELOPMENT);
Debug::$strictMode = TRUE;

// Step 5: Run the application!
$application->run();
HanziQ
Člen | 16
+
0
-

Pravděpodobně máš verzi pro PHP 5.3 → musíš nahradit za

<?php
Nette\Environment::....
?>

nebo na začátek souboru dát

<?php
use Nette\Environment;
Environment::...
...
?>
masterr
Začátečník | 141
+
0
-

Mám verzi pro php 5.2. Tam se to nedá použít? Nevím jaký jsou rozdíli php ve verzi 5.2 a 5.3.

Parse error: syntax error, unexpected T_STRING, expecting T_CONSTANT_ENCAPSED_STRING…

require LIBS_DIR . '/Nette/loader.php';

use Nette\Environment;

Environment::loadConfig();


//...
$application = Environment::getApplication();
$application->catchExceptions = FALSE;

Editoval masterr (29. 11. 2010 19:51)

warp
Člen | 26
+
0
-

A co prefixy? Zkus:

NEnvironment::loadConfig();
masterr
Začátečník | 141
+
0
-

Máš pravdu, dal jsem tam ted tu verzi bez prefixů. Ale ted mi to hází:

Fatal error: Call to undefined method Debug::addColophon() in /DISK2/www/neco/libs/dibi/libs/DibiConnection.php on line 57

původní instalaci jsem dělal podle "":https://doc.nette.org/cs/quickstart

Mikulas Dite
Člen | 756
+
0
-

Stáhni ještě nejnovější dibi a bude to v pořádku.

masterr
Začátečník | 141
+
0
-

Dík, už to jede až na tohle:

Warning: ini_set() [function.ini-set]: Unable to access /DISK2/www/neco/app/../log/php_error.log in /DISK2/www/neco/libs/Nette/Debug/Debug.php on line 219

složka má práva 777 – /DISK2/www/neco/app/../log

Čím to je?

warp
Člen | 26
+
0
-

To muze byt teoreticky zpusobene pravy do slozky: ve win vista a 7 kliknes pravym na celou slozku „www“, Vlastnosti – karta Zabezpeceni, Upravit a u systemu das u Uplneho rizeni povolit. ale jestli ti to predtim fungovalo, tak me momentalne nic nenapada

masterr
Začátečník | 141
+
0
-

Předtím to fungovalo a je to na normál hostingu. Ale stejně to přesunu na localhost a budu používat verzi s php 5.3. Tak uvidim jestli to pomůže.

masterr
Začátečník | 141
+
0
-

TAk jsem to dal na localhost ->verze 2.0alpha php 5.3

a hází mi to chybu
Fatal error: Class ‚SimpleRouter‘ not found in D:\lh\p\app\bootstrap.php on line 60

use Nette\Environment;
require LIBS_DIR . '/Nette/loader.php';


Environment::loadConfig();



$application = Environment::getApplication();
$application->catchExceptions = FALSE;


$application = Environment::getApplication();
$application->errorPresenter = 'Error';
//$application->catchExceptions = TRUE;
dibi::connect(Environment::getConfig('database'));


// Step 4: Setup application router
$router = $application->getRouter();

// mod_rewrite detection
if (function_exists('apache_get_modules') && in_array('mod_rewrite', apache_get_modules())) {
	$router[] = new Route('index.php', array(
		'module' => 'Front',
		'presenter' => 'Default',
	), Route::ONE_WAY);

	$router[] = new Route('<presenter>/<action>/<id>', array(
		'presenter' => 'Front:Default',
		'action' => 'default',
		'id' => NULL,
	));

} else {
	$router[] = new SimpleRouter('Front:Default:default');
}



FormContainer::extensionMethod('FormContainer::addCheckboxList', array('CheckboxList', 'addCheckboxList'));


    Debug::enable(Debug::DEVELOPMENT);
Environment::setMode(Environment::DEVELOPMENT);
Debug::$strictMode = TRUE;

// Step 5: Run the application!
$application->run();

Co je s tim za problém? Ve verzi 1.0 php 5.2 mi to jelo.

Solution
Člen | 50
+
0
-
<?php
use Nette\Debug,
	Nette\Environment,
	Nette\Application\Route,
	Nette\Application\SimpleRouter,
	Nette\Forms\FormContainer;
?>

S tímhle by to mělo jít.

Editoval Padik (1. 12. 2010 17:43)

masterr
Začátečník | 141
+
0
-

Dík a ted eště :

Fatal error: Uncaught exception ‚ReflectionException‘ with message ‚Class FormContainer does not exist‘ in D:\lh\p\libs\Nette\Utils\Object.php:115 Stack trace: #0 D:\lh\p\libs\Nette\Utils\Object.php(115): ReflectionClass->__construct(‚FormContainer‘) #1 D:\lh\p\app\bootstrap.php(62): Nette\Object::extensionMethod(‚FormContainer::…‘, Array) #2 D:\lh\p\index.php(13): require(‚D:\lh\p\app\boo…‘) #3 {main} thrown in D:\lh\p\libs\Nette\Utils\Object.php on line 115

Solution
Člen | 50
+
0
-
<?php
FormContainer::extensionMethod('Nette\Forms\FormContainer::addCheckboxList', array('CheckboxList', 'addCheckboxList'));
?>

Aspoň tedy myslím.

masterr
Začátečník | 141
+
0
-

JJ, to funguje dik, taky mě to mohlo napadnout…

Ted:

Class ‚Presenter‘ not found

File: D:\lh\p\app\presenters\BasePresenter.php Line: 3

3:  abstract class BasePresenter extends Presenter {
4:
5:            public $oldModuleMode = FALSE;
6:            public $oldLayoutMode = FALSE;
7:    }

Neptal bych se kdybych vedel co s tím…

Solution
Člen | 50
+
0
-

:-D V php 5.3 musíš pro všechny Nette komponenty, volat namespace, nejlépe se vždy podívej do konkrétního souboru v libs a podívej se pod jakým namespace je, popř. pokud používáš nějaký kvalitnější IDE, tak když začneš psát Nette\, tak on ti bude napovídat, jinak:

<?php
use Nette\Application\Presenter; // Do base
  abstract class BasePresenter extends Presenter {

            public $oldModuleMode = FALSE;
            public $oldLayoutMode = FALSE;
    }
?>
masterr
Začátečník | 141
+
0
-

Je tady někde nějaký článek o namespace? Něco jsem letmo někde četl…

Momentálně používám PHPedit (dneska jsem ho nainstaloval), nic mi nanapoví když píšu Nette\. Teda napoví, ale jen občas,,když se mu chce".

Nette\Application\BadRequestException #404

Cannot load presenter ‚Front:Default‘, class ‚FrontModule\DefaultPresenter‘ was not found in ‚D:\lh\p/app/FrontModule/presenters/DefaultPresenter.php‘.

Solution
Člen | 50
+
0
-

Fuu, no musíš do každého souboru(presenter, model), vepsat na začátek, samozřejmě jen u těch, co mají spadat k frontmodule:

<?php
namespace FrontModule;
?>

A rozdělit to správně do složek, mmnt, snad tu najdu popis.
https://doc.nette.org/…ry-structure#… – adresářová struktura

masterr
Začátečník | 141
+
0
-

Tuhle strukturu tam mám, něco jsem načetl o namespace…ale:

namespace FrontModule;
class Front_DefaultPresenter extends BasePresenter
{.....
}

Class ‚FrontModule\BasePresenter‘ not found

Něco jsem zkoušel, ale nedaří se, (eště to nastuduju) jak to mám zapsat?

Solution
Člen | 50
+
0
-

Front_DefaultPresenter přejmenuj jen na DefaultPresenter
a BasePresenter, musí být pod stejným namespace, jako tento modul, takže do souboru s BasePresenterem, také přidej „namespace Fr..“.

masterr
Začátečník | 141
+
0
-

JJ dík, mě to pak taky napadlo, ale už jsem měl vyplý notes…

Ted mám problém s dibi v modelu, napsal jsem to takle:

namespace FrontModule;
use dibi;
class Goods
{…
 }

Fatal Error

Maximum execution time of 30 seconds exceeded


File: D:\lh\p\libs\Nette\Debug\Debug.php   Line: 415

Když jsem to obrátil :

2:    use dibi;
3:    namespace FrontModule;
4:
5:    class Goods
6:    {

tak

Fatal Error

Class 'Nette\DebugHelpers' not found

File: D:\lh\p\app\models\GoodsModel.php   Line: 2

 2:    use dibi;
 3:    namespace FrontModule;

To by mi němelo házet, když mám v bootstrap use Nette\Debug; , ne?

masterr
Začátečník | 141
+
0
-

Pls můžeš eště na tohle mrknout, snad by to mělo být už to poslední. Dík moc.

Edit: Možná už vím čim to je…tak moment..

Editoval masterr (3. 12. 2010 16:32)

Neo
Člen | 5
+
0
-

Mohu se zeptat čím to nakonec bylo? Mám stejný problém ( Class DebugHelpers' not found ), používám verzi Nette Framework 2.0-alpha2 pro PHP 5.2 bez prefixů tudíž chybu s namespace bych mít neměl a děje se mi to u vlastní třídy zděděné od Object, pokud dědění odstraním chyba zmizí.

stefi023
Člen | 71
+
0
-

Ted jsem resil podobny problem s Class 'Nette\DebugHelpers' not found a u me byla chyba v tom, ze jsem dedil urcitou tridu a nasledne prepisoval jednu metodu a rozsiroval pocet parametru, a u novych parametru jsem nenastavil defaultni hodnotu. tzn neco jako

<?php
class A {
  public function methodA($param1) {}
}

class B extends A {
  public function methodA($param1,$param2) {}
}

?>

jsem upravil na neco jako

<?php
class A {
  public function methodA($param1) {}
}

class B extends A {
  public function methodA($param1,$param2=null) {}
}
?>

i kdyz porad nevim, proc mi to nezachytila ladenka spravne, v jinych pripadech tento typ chyb zachyti spravne

na1k
Člen | 288
+
0
-

nebudu otevírat noé vlákno; také mám problém s Class 'Nette\DebugHelpers' not found :(

Laděnka hlásí chybu na řádku s regulárním výrazem, takže netuším jak to souvisí s Nette. Že by regulár vyhazoval nějakou chybu a Debug se to snažil ošetřit?

Jedná se o metodu formatTemplateFiles v mém BasePresenteru a snažím se web převést na aktuální 2.0-alpha2 z downloadové stránky. Verze kterou nahrazuji byla někde z doby kolem WebExpa, kdy se měnilo číslování verzí (bohužel už je to přepsané, takže nemůžu říct přesně).

<?php
public function formatTemplateFiles($presenter, $view) {
   /* ... */

   $cnt = 0;
   $noDef = \preg_replace('/Default$/', '', $path, -1, &$cnt); /* zde ukazuje laděnka chybu */

   /* ... */
}
?>

Omlouvám se, psal jsem rychleji než přemýšlel. Zkusil jsem laděnku vypnout, resp. nechat ji logovat do souboru a dostal jsem Call-time pass-by-reference has been deprecated a problém vyřešil :)

Přesto ale stále nechápu, proč na chybu neupozornila laděnka?

Editoval na1k (22. 1. 2011 13:47)

Aurielle
Člen | 1281
+
0
-

Když Laděnku skryješ tak je dost možné že se ve standardním PHP výpise objeví i strict chyba.