Quickstart – Parse Error unexpected T_PRIVATE

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

Zdravím, začínám dělat s Nette, ale bohužel jsem narazil na problém hned u quickstartu.

Dostal jsem se do bodu „Šablona“ na této stránce – https://doc.nette.org/cs/quickstart

Problém je v tom, že pokud si chci zobrazit stránku „Nesplněných úkolů“, tak mi to vyhodí chybu „Parse Error – syntax error, unexpected T_PRIVATE“.

Konkrétní bod to ukazuje na: File: …\app\presenters\HomepagePresenter.php Line: 20, což je toto:

private $model;

Problém bude asi v modelu, ale tam jsem vše okopíroval z quickstartu a co tak koukám, tak žádnej problém nevidím. Kód modelu dávám na konec příspěvku.

Třeba v tom nějaký zkušenější oko uvidí problém. :)

Model:

<?php

/**
 * Základní třída modelu.
 */
class Model extends Nette\Object
{
    /** @var Nette\Database\Connection */
    public $database;


    /**
     * @param Nette\Database\Connection $database
     */
    public function __construct(Nette\Database\Connection $database)
    {
        $this->database = $database;
    }

}

/**
 * Získá tabulku úkolů.
 * @return Nette\Database\Table\Selection
 */
public function getTasks()
{
    return $this->database->table('task');
}

/**
 * Získá tabulku se seznamy úkolů.
 * @return Nette\Database\Table\Selection
 */
public function getTaskLists()
{
    return $this->database->table('tasklist');
}

/**
 * Získá tabulku uživatelů.
 * @return Nette\Database\Table\Selection
 */
public function getUsers()
{
    return $this->database->table('user');
}

Editoval Proto (7. 1. 2012 22:46)

Michal Vyšinský
Člen | 608
+
0
-

Spíš sem dej kód homepage presenteru. Viděl bych to na chybějcí středník někde před „private $model“
EDIT: Když to ukazuje chybu v homepagepresnter.php tak chyba určitě nebude v modelu :D

Editoval CherryBoss (7. 1. 2012 22:48)

Proto
Člen | 3
+
0
-

HomepagePresenter

<?php

/**
 * Homepage presenter.
 *
 * @author     John Doe
 * @package    MyApplication
 */
class HomepagePresenter extends BasePresenter
{

	public function renderDefault()
	{
		$this->template->anyVariable = 'any value';
	}

}

/** @var Model */
private $model;

public function startup()
{
    parent::startup();
    $this->model = $this->getService('model');
}

public function renderDefault()
{
    $this->template->tasks = $this->model->getTasks()
                ->where(array('done' => false))->order('created ASC');
}
Michal Vyšinský
Člen | 608
+
0
-

Tento celý kód máš mimo definici třídy

/** @var Model */
private $model;

public function startup()
{
    parent::startup();
    $this->model = $this->getService('model');
}

public function renderDefault()
{
    $this->template->tasks = $this->model->getTasks()
                ->where(array('done' => false))->order('created ASC');
}

Mělo by to být takto:

<?php

/**
 * Homepage presenter.
 *
 * @author     John Doe
 * @package    MyApplication
 */
class HomepagePresenter extends BasePresenter
{

        public function renderDefault()
        {
                $this->template->anyVariable = 'any value';
        }

}

/** @var Model */
private $model;

public function startup()
{
    parent::startup();
    $this->model = $this->getService('model');
}

public function renderDefault()
{
    $this->template->tasks = $this->model->getTasks()
                ->where(array('done' => false))->order('created ASC');
}

EDIT: Vidím, že v tom quickstartu je to trochu matoucí (to jak je to napsané). Ale se základy OOP, které bys měl mít, než se pustíš do Nette bys to věděl. (Toto nemá být nadávka, urážka ani nic podobného)

Editoval CherryBoss (7. 1. 2012 22:58)

hAssassin
Člen | 293
+
0
-

trida HomepagePresenter ti konci jeste pred definici property $model a metod startup() a renderDefault(). Jsou to metody, cili musi byt ve tride. Uprav kod presenteru jako nasledovne:

<?php

/**
 * Homepage presenter.
 *
 * @author     John Doe
 * @package    MyApplication
 */
class HomepagePresenter extends BasePresenter
{

	/** @var Model */
	private $model;

	public function startup()
	{
	    parent::startup();
	    $this->model = $this->getService('model');
	}

        public function renderDefault()
	{
	    $this->template->tasks = $this->model->getTasks()
                ->where(array('done' => false))->order('created ASC');
	}

}
Proto
Člen | 3
+
0
-

Ajo, díky moc. Ne že bych OOP přímo neuměl, určitě mám ještě velký mezery, ale tady byl hlavně problém v tom, že sem u toho moc nepřemýšlel a spolíhal se na quickstart. Říkal jsem si že si to hlavně pročtu a neučím se teorii a praktickou část jen tak projedu.

Tak ještě jednou díky, jsem poučen a začnu pořádně koukat :)