Class not found php 5.3.5 ze by namespace? hmmmm

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
czmacek@centrum.cz
Člen | 14
+
0
-

Ahoj mam takovy velice netradicni problem, ktery se tady resil uz mnohokrat, nicmene proste nejak to tam nevidim. To jest „class not found“. Vytvoreni instance Form probehne v pohode, ale jakmile chce pristoupit k vytvoreni instance tridy Navigation, tak mne to hodi chybu. Temp jsem mazal.


Adresarova struktura:

  1. app
    1. AdminModule
    2. FrontModule
      1. Presenters
        • BasePresenter.php (tady mam ten kod)
      2. Templates
    3. Presenters
      • BasePresenter.php

atd…

  1. libs
    1. Nette
      1. Forms
        • Form.php
      2. Navigation
        • Navigation.php

atd…


jestli muzu nekoho poprosit jestli na to mrkne, ja to tam nevidim. Ale rano moudrejsi vecera, jak se rika. Predem dikys '-)

<?php

namespace FrontModule;

use \Nette\Forms\Form,
 \Nette\Navigation\Navigation;

class BasePresenter extends \BasePresenter
{

    public function createComponentNavigation($name)
    {
                $obj = new Form($name);
                $nav = new Navigation($this, $name);
                $nav->setupHomepage("Úvod", $this->link("Homepage:"));
?>

# Apache/2.2.17 (Win32) PHP/5.3.5

# Nette Framework 2.0-dev (revision bb2b723 released on 2011–02–06)

Editoval czmacek@centrum.cz (23. 2. 2011 1:29)

Quinix
Člen | 108
+
0
-

Navigation ale není součástí Nette, je to doplněk, který pokud vím žádný jmenný prostor nemá.

Takže $nav = new Navigation($this, $name); nahraď $nav = new \Navigation($this, $name);

a btw, v presenteru bys měl používat AppForm, ne obyčejný Form.

czmacek@centrum.cz
Člen | 14
+
0
-

cau, promin, zapomel jsem uvest. V doplnku Navigation samozrejmne namespace mam doplnene. Tj.

  • Navigation.php
<?php
/**
 * Navigation
 *
 * @author Jan Marek
 * @license MIT
 */
namespace Nette\Navigation;

use Nette;

class Navigation extends Application\Control {
...
}
?>
  • NavigationNode.php
<?php

/**
 * Navigation node
 *
 * @author Jan Marek
 * @license MIT
 */
namespace Nette\Navigation;

use Nette;

class NavigationNode extends ComponentContainer {
?>

AppForm .), ja jsem tam hodil co mne prvni prislo pod ruku, jen nazorove.) Kazdopadne porad nic.(

Editoval czmacek@centrum.cz (23. 2. 2011 11:35)

czmacek@centrum.cz
Člen | 14
+
0
-

no nic, jdu to zkusit na Skeleton. Uz jsem to pouzival nikdy jsem s tim nemel problem, tak jestli nejaky indexace nebo tak neco?

norbe
Backer | 405
+
0
-

Namespace sice máš doplněné, nicméně špatně. Pokud použijeě pouze use Nette, znamená to že místo \Nette\Foo můžeš použít pouze Nette\Foo, pokud chceš používat pouze Foo, musí být nahoře uvedeno use Nette\Foo.

PHP neumí nic jako import celého namespace jako např. java.

czmacek@centrum.cz
Člen | 14
+
0
-

ale jaktoze to projde i u toho formu, to by taky melo vyhodit class not found ne?

Editoval czmacek@centrum.cz (23. 2. 2011 12:18)

norbe
Backer | 405
+
0
-

Jestli vidím dobře, tak u Formu máš use Nette\Forms\Form :-)

czmacek@centrum.cz
Člen | 14
+
0
-

ja jsem uplne natvrdlej, no dyt jo .), takze hnedka muzu za new psat jen AppForm(…) a u navigation bych mel psat jen new Navigation(…) ne?

czmacek@centrum.cz
Člen | 14
+
0
-

no tak co bych na to rekl service.Nette-Loaders-RobotLoader.option.directory[] = %libsDir% . Jeste ze jsem to kontroloval, koukam na to, vidim %appDir%, rikam si tady to je v poradku.) no hlavne ze mne to uz chodi. Quinix a norbe diky za tipy..) Jinak to teda mam use Nette\Navigation\Navigation; a new Navigation(…) a vse ok