Migrace na NETTE 2.1 problém se SESSION

- Klainer
- Člen | 42
Dobrý den,
snažím se můj projekt updatovat na NETTE 2.1, ale nemůžu zjistit proč se
mi stále vyhazuje následující chybka:
Possible problem: you are sending a HTTP header while already having some data in output buffer. Try OutputDebugger or start session earlier.
126: // Configure and run the application!
127: $container->application->run();
Bootstrap.php vypadá následovně
use Nette\Application\Routers\Route;
// Load Nette Framework
require LIBS_DIR . '/autoload.php';
// Configure application
$configurator = new Nette\Configurator;
// Enable Nette Debugger for error visualisation & logging
//$configurator->setDebugMode($configurator::DEVELOPMENT);
//$configurator->setDebugMode(TRUE);
$configurator->enableDebugger(__DIR__ . '/../log');
// Enable RobotLoader - this will load all classes automatically
$configurator->setTempDirectory(__DIR__ . '/../temp');
$configurator->createRobotLoader()
// ->addDirectory(__DIR__ . '/../libs/DoctrineExtensions')
// ->addDirectory(__DIR__ . '/../libs/SessionPanel')
// ->addDirectory(__DIR__ . '/../libs/grido')
// ->addDirectory(__DIR__ . '/../libs/Helpers')
// ->addDirectory(__DIR__ . '/../libs/Facebook')
// ->addDirectory(__DIR__ . '/../libs/Symfony')
->addDirectory(APP_DIR)
->register();
//Kdyby\Extension\Diagnostics\HtmlValidator\DI\ValidatorExtension::register($configurator);
//Kdyby\SessionPanel\DI\SessionPanelExtension::register($configurator);
//\Nella\Console\Config\Extension::register($configurator);
//\Nella\Doctrine\Config\Extension::register($configurator);
//\Nella\Doctrine\Config\MigrationsExtension::register($configurator);
//Kdyby\Translation\DI\TranslationExtension::register($configurator);
// Create Dependency Injection container from config.neon file
$configurator->addConfig(__DIR__ . '/config/config.neon');
$container = $configurator->createContainer();
Config.neon
common:
parameters:
database:
driver: pdo_mysql
host: localhost
dbname: test
user:
password:
charset: utf8
collation: utf8_czech_ci
session:
autoStart: true # výchozí je smart
expiration: "+ 10 days"
facebook:
appId: 'xxxxx' # musi byt string
secret: 'xxxx'
translation:
default: cs
fallback: [cs_CZ, cs, en, en_US, en_GB]
whitelist: ['cs', 'en']
php:
date.timezone: Europe/Prague
session.save_path: "%tempDir%/sessions"
# zlib.output_compression: yes
nette:
session:
autoStart: smart
debugger:
strictMode: true
bar:
doctrine:
connection: %database%
console: true
migrations:
connection: @doctrine.connection
services:
database: @doctrine.entityManager
authenticator: Authenticator( @database::getRepository('User'), @database )
facebook: Facebook( {appId: %facebook.appId%, secret: %facebook.secret%} )
facebookAuthenticator: FacebookAuthenticator( @database::getRepository('User') )
index.php
// uploadify session problem
if (isset($_REQUEST[session_name()])) {
$_COOKIE[session_name()] = $_REQUEST[session_name()];
}
// absolute filesystem path to the web root
define('WWW_DIR', __DIR__);
// absolute filesystem path to the application root
define('APP_DIR', WWW_DIR . '/app');
// absolute filesystem path to the libraries
define('LIBS_DIR', WWW_DIR . '/libs');
// absolute filesystem path to the temporary files
define('TEMP_DIR', WWW_DIR . '/temp');
// load bootstrap file
require APP_DIR . '/bootstrap.php';
EDIT:
Zjistil jsem že to dělá tenhle doplněk:
\Nella\Console\Config\Extension::register($configurator);
Upravoval jsem tam jednu metodu kvůli tomu že byla odstraněna property
classess z containeru.
Jedná se o soubor: LazyRouter.php
Vyhodí to chybku: Illegal offset type in isset or empty
Na řádku: ..\pcms\libs\nette\nette\Nette\DI\Container.php:115
Aktuálně vypadá takhle:
class LazyRouter extends Router
{
/**
* @param \Nette\DI\Container
*/
public function __construct(\Nette\DI\Container $container, $serviceName = NULL)
{
if (!$serviceName) {
$class = 'Symfony\Component\Console\Application';
$lower = ltrim(strtolower($class), '\\');
$names = $container->findByType($class);
\Nette\Diagnostics\Debugger::dump($names);
//exit;
if (!$names) {
throw new MissingServiceException("Service of type $class not found.");
} elseif (count($names) > 1) {
throw new MissingServiceException("Multiple services of type $class found: " . implode(', ', $names) . '.');
} else {
$serviceName = $container->getService($names[0]);
}
}
if (!$container->hasService("console.application")) {
throw new \Nette\DI\MissingServiceException("Service '$serviceName' not found.");
//exit;
}
//exit;
$this->callback = callback(function () use ($container, $serviceName) {
$console = $container->getService($serviceName);
\Nette\Diagnostics\Debugger::dump($console);
$console->run();
});
}
}
Pak tu mám ještě nějaké info:
/--php
804: /**
805: * @return Nette\Application\Routers\RouteList
806: */
807: public function createServiceRouter()
808: {
809: $service = new Nette\Application\Routers\RouteList;
810: $service->offsetSet(NULL, $this->getService(**'console.route'**));
811: return $service;
812: }
\--
Pokud by někdo věděl v čem je problém, budu mu velmi vděčný!
Děkuji !
Editoval Klainer (19. 1. 2014 16:11)

- Klainer
- Člen | 42
Nepochopil jsem ji celkově.
Ale vyřešil jsem to tím, že jsem si nainstaloval kdyby Consoly která je
funkční pro nové nette.
Nicméně kdyby jsi byl tak hodný, mohl bys mě říct co jsem tam dělal
špatně ?
Já to chápu tak, že jsem se pokoušel přistupovat k poli pomocí obejktu
nebo pole jako klíčový parametr..
Jako parametr jsem ale posílal string..
Děkuji

- Klainer
- Člen | 42
Ještě bych se k tomu vrátil, nestal mi znovu tento problém se session, při odeslání formulře, dle chybové hlášky jsem zkusil ouputdebuger, ale nějak nevím jak detekovat kde je vlastně samotný problém nebo, příčina, abych tuhle věc mohl opravit…
Výpis output debuggeru:
Output started here:<br />
#0 C:\xampp\htdocs\pcms\temp\cache\_Nette.FileTemplate\_Templates._layout.latte-51f201e23d1add8099ad23d56ef6b442.php(48): {closure}('<!DOCTYPE html>...', 3)<br />
#1 C:\xampp\htdocs\pcms\libs\nette\nette\Nette\Utils\LimitedScope.php(65): include('C:\xampp\htdocs...')<br />
#2 C:\xampp\htdocs\pcms\libs\nette\nette\Nette\Templating\FileTemplate.php(108): Nette\Utils\LimitedScope::load('C:\xampp\htdocs...', Array)<br />
#3 C:\xampp\htdocs\pcms\temp\cache\_Nette.FileTemplate\_Page.editPage.latte-1f3a78253b5d3d6c6ce634e8ce976d0a.php(93): Nette\Templating\FileTemplate->render()<br />
#4 C:\xampp\htdocs\pcms\libs\nette\nette\Nette\Utils\LimitedScope.php(65): include('C:\xampp\htdocs...')<br />
#5 C:\xampp\htdocs\pcms\libs\nette\nette\Nette\Templating\FileTemplate.php(108): Nette\Utils\LimitedScope::load('C:\xampp\htdocs...', Array)<br />
#6 C:\xampp\htdocs\pcms\libs\nette\nette\Nette\Application\Responses\TextResponse.php(51): Nette\Templating\FileTemplate->render()<br />
#7 C:\xampp\htdocs\pcms\libs\nette\nette\Nette\Application\Application.php(152): Nette\Application\Responses\TextResponse->send(Object(Nette\Http\Request), Object(Nette\Http\Response))<br />
#8 C:\xampp\htdocs\pcms\libs\nette\nette\Nette\Application\Application.php(85): Nette\Application\Application->processRequest(Object(Nette\Application\Request))<br />
#9 C:\xampp\htdocs\pcms\app\bootstrap.php(134): Nette\Application\Application->run()<br />
#10 C:\xampp\htdocs\pcms\index.php(47): require('C:\xampp\htdocs...')<br />
#11 {main}
Vyřešeno: V komponěntě formuláře jsem měl při zpracování redirect a měl jsem tam kod na debugování (dump)
public function editPageStructureSubmitted(Form $form)
{
$data = $form->getValues();
$post = $this->getRequest()->getPost();
$params = $this->getRequest()->getParameters();
\Nette\Diagnostics\Debugger::dump($params); <----- Toto mu vadilo
Editoval Klainer (27. 1. 2014 13:09)