Struktura adresářů a volání models TodoManager.php

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

Ahoj,
dělám web s FrondModule a s AdminModule strukturou a dostal jsem se do fáze kdy chci získat data z databáze funkci na to mám v modulu todoManager.php ve složce modules.Samozřejmě že to nefunguje a ted hledám zda mám mít ve složce models další složku FrontModule a AdminModule kam soubor TodoManager.php nakopíruji. nebo jsou modely na přímo ve složce models?
další věc je jak upravit dotaz abych se na samotný model dostal:

$this->template->todos = $this->model->findAllTodos($order = array(
           	 'id' => 'ASC',
       		 ), $where = NULL
        	,$offset = NULL,
		$limit = NULL,
		$tabulky = '[nabidka]');

jedná se o tenhle kousek kodu zřejmě
$this->model->findAllTodos
a nevím jak bych ho správně měl napsat aby jsem se odkazal na daný model…

Děkuji

westrem
Člen | 398
+
0
-

Adresar /models je nezavisly na modularnej strukture.

Chyba je na 99% v tom ci RobotLoader loader prehladava tvoju zlozku /models alebo v tom ako plnis premennu $this->model

Pre istotu teda sa pozri ci mas v config.ini nasledovne:

<?php
service.Nette-Loaders-RobotLoader.factory = Nette\NConfigurator::createRobotLoader
service.Nette-Loaders-RobotLoader.option.directory[] = %appDir%
service.Nette-Loaders-RobotLoader.option.directory[] = %libsDir%
service.Nette-Loaders-RobotLoader.run = TRUE
?>

Ak by chyba pretrvavala tak skus poslat viac kodu (ako premennu inicializujes), adresarovu strukturu apod.

KillPrd
Začátečník | 110
+
0
-

Tak to nepomohlo tak zasílám

config.ini

;
; SECURITY WARNING: it is CRITICAL that this file & directory are NOT accessible directly via a web browser!
;
; If you don't protect this directory from direct web access, anybody will be able to see your passwords.
; https://nette.org/en/security-warning
;
[common]
; PHP configuration
php.date.timezone = "Europe/Prague"
php.iconv.internal_encoding = "UTF-8"
php.mbstring.internal_encoding = "UTF-8"
;php.default_charset = "UTF-8"

; variables
variable.lang = en
variable.tempDir = %appDir%/temp
variable.logDir = %appDir%/log

; services
service.Nette-Security-IAuthenticator = UsersModel
service.Nette-Loaders-RobotLoader.factory = Nette\Configurator::createRobotLoader
service.Nette-Loaders-RobotLoader.option.directory[] = %appDir%
service.Nette-Loaders-RobotLoader.option.directory[] = %libsDir%
service.Nette-Loaders-RobotLoader.run = TRUE


[production < common]


[development < common]

bootstrap

<?php

/**
 * My Application bootstrap file.
 *
 * @copyright  Copyright (c) 2010 John Doe
 * @package    MyApplication
 */



// Step 1: Load Nette Framework
// this allows load Nette Framework classes automatically so that
// you don't have to litter your code with 'require' statements
require LIBS_DIR . '/Nette/loader.php';



// Step 2: Configure environment
// 2a) enable Debug for better exception and error visualisation
Debug::enable();

// 2b) load configuration from config.ini file
Environment::loadConfig();



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



// Step 4: Setup application router
$router = $application->getRouter();
        $router[] = new Route('admin/<presenter>/<action>/<id>', array(
		'module' => 'Admin',
		'presenter' => 'Default',
		'action' => 'default',
		'id' => NULL
		));

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

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

presenters> Frontmodule>DefaultPresenter:

<?php

class Front_DefaultPresenter extends BasePresenter
{

        public function actionDefault()
        {

			$this->template->todo = $this->model->findAllTodos($order = array(
            'id' => 'ASC',
        ), $where = 'podsekce = 0'
        ,$offset = NULL,
		$limit = NULL,
		$tabulky = '[kategorie]');

        }

}
?>

app>modules>TodoManager:

class TodoManager
{
    public function findAllTodos($order = NULL, $where = NULL, $offset = NULL, $limit = NULL,$tabulky = '[tasks]')
    {
        return dibi::query(
            'SELECT * FROM '.$tabulky.'',
            '%if', isset($where), 'WHERE %and', isset($where) ? $where : array(), '%end',
            '%if', isset($order), 'ORDER BY %by', $order, '%end',
            '%if', isset($limit), 'LIMIT %i %end', $limit,
            '%if', isset($offset), 'OFFSET %i %end', $offset
        )->setRowClass('Todo');


    }
}

Jen tedy dodám že tento zpusob byl funkční jen jsem změnil adresářovou strukturu a změnil názvy souboru tak se mi to zdá divné…

despiq
Člen | 320
+
0
-

precist nejakou knizku nebo serial o php5
a pak znovu precist dokumentaci k nette

KillPrd
Začátečník | 110
+
0
-

PHP programuji dost dlouho a na nette přecházím teprve ted je pravda že jisté mezery mám ale tohle jsou rady k pohledání stejně jako vygoogluj si to a tak proto tady rozhodně není forum.jde mi o logičnost a pochopení nette které se kolikrát z manuálu nevyčte pak stačí jedna věta a je ti vše jasny. Díky

Petr Stribny
Člen | 16
+
0
-

Ve svém Presenteru používáš $this->model, přičemž nikde nevidím, že bys tam ten model měl definovaný a inicializovaný. Pokud ho teda nemáš už definovaný v BasePresenteru, tak bych začal tímto.

srigi
Nette Blogger | 558
+
0
-

Chyba je v tomto riadku v Presenteri:

$this->template->todo = $this->model->findAllTodos(...

$this->model musis nejako naplnit (priradit instanciu TodoManager). Bud ho instanciuj, alebo metodu findAllTodos preved na staticku a ten riadok prepis na:

$this->template->todo = TodoManager::findAllTodos(...

A BTW v Presenteri nemas nadefinovanu premennu pre $this->model. Su to naozaj zaklady.

22
Člen | 1478
+
0
-

a připojeni k databázi by se taky hodilo..

KillPrd
Začátečník | 110
+
0
-

Děkuji všem za pomoc, pomohla varianta
TodoManager::findAllTodos
která je jasná a srozumitelná. z nějakého duvodu se mi nepodařilo sprovoznit předchozí verzy
$this->model->findAllTodos ikdyž jí mám sprovozněnou v jiném příklady jestli se nemílím inicializuje se přes tento kod:

public function getModel() {
        if(!isset($this->todoManager))
            $this->todoManager = new TodoManager;

        return $this->todoManager;
    }

Děkuji