Estou novamente com problema numa app que estou a desenvolver e estou a utilizar a framework Slim.
Indo por partes...
O que acontece é o seguinte.
Tenho uma listagem de vários produtos e quando clico num é suposto adicionar a um cesto de compras e essa parte funciona, o que não funciona é a parte em que quando coloco na barra de endereço um produto que não existe deveria voltar ao index, no entanto dá erro.
CartController.php
Código (PHP):
Basket.php
Código (PHP):
Quando clico num dos elementos a adicionar aparece uma página com informação como deveria aparecer. Aí quando altero o endereço para um produto que não existe ele retorna ao index. Por outro lado quando clico no produto e faço "Adicionar" ele adiciona e adiciona uma quantidade por defeito que é 1. Aqui quando tento modificar o endereço para um produto inexistente dá-me erro.
esta é a parte final do log de erros.
Código :
Indo por partes...
O que acontece é o seguinte.
Tenho uma listagem de vários produtos e quando clico num é suposto adicionar a um cesto de compras e essa parte funciona, o que não funciona é a parte em que quando coloco na barra de endereço um produto que não existe deveria voltar ao index, no entanto dá erro.
CartController.php
Código (PHP):
<?php
namespace Cart\Controllers;
use Slim\Router;
use Slim\Views\Twig;
use Cart\Basket\Basket;
use Cart\Models\Product;
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
class CartController {
protected $basket;
protected $product;
public function __construct(Basket $basket, Product $product) {
$this->basket = $basket;
$this->product = $product;
}
public function index(Request $request, Response $response, Twig $view) {
return $view->render($response, 'cart/index.twig');
}
public function add($slug, $quantity, Request $request, Response $response, Router $router) {
$product = $this->product->where('slug', $slug)->first();
if (!$product) {
return $response->withRedirect($router->pathFor('home'));
}
die('add');
}
}
?>
namespace Cart\Controllers;
use Slim\Router;
use Slim\Views\Twig;
use Cart\Basket\Basket;
use Cart\Models\Product;
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
class CartController {
protected $basket;
protected $product;
public function __construct(Basket $basket, Product $product) {
$this->basket = $basket;
$this->product = $product;
}
public function index(Request $request, Response $response, Twig $view) {
return $view->render($response, 'cart/index.twig');
}
public function add($slug, $quantity, Request $request, Response $response, Router $router) {
$product = $this->product->where('slug', $slug)->first();
if (!$product) {
return $response->withRedirect($router->pathFor('home'));
}
die('add');
}
}
?>
Basket.php
Código (PHP):
<?php
namespace Cart\Basket;
use Cart\Models\Product;
use Cart\Support\Storage\Contracts\StorageInterface;
use Cart\Basket\Exceptions\QuantityExceededException;
class Basket {
protected $storage;
protected $product;
public function __construct(StorageInterface $storage, Product $product) {
$this->storage = $storage;
$this->product = $product;
}
public function add(Product $product, $quantity) {
if ($this->has($product)) {
$quantity = $this->get($quantity)['quantity'] + $quantity;
}
$this->update($product, $quantity);
}
public function update(Product $product, $quantity) {
if (!$this->product->find($product->id)->hasStock($quantity)) {
throw new QuantityExceededException;
}
if ($quantity === 0) {
$this->remove($product);
return;
}
$this->storage->set($product->id, [
'product_id' => (int) $product->id,
'quantity' => (int) $quantity,
]);
}
public function remove(Product $product) {
$this->storage->unset($product->id);
}
public function has(Product $product) {
return $this->storage->exists($product->id);
}
public function get(Product $product) {
return $this->storage->get($product->id);
}
public function clear() {
$this->storage->clear();
}
public function all() {
$ids = [];
$items = [];
foreach ($this->storage->all() as $product) {
$ids[] = $product['product_id'];
}
$products = $this->product->find($ids);
foreach ($products as $product) {
$product->quantity = $this->get($product)['quantity'];
$items[] = $product;
}
return $items;
}
public function itemCount() {
return count($this->storage);
}
}
?>
namespace Cart\Basket;
use Cart\Models\Product;
use Cart\Support\Storage\Contracts\StorageInterface;
use Cart\Basket\Exceptions\QuantityExceededException;
class Basket {
protected $storage;
protected $product;
public function __construct(StorageInterface $storage, Product $product) {
$this->storage = $storage;
$this->product = $product;
}
public function add(Product $product, $quantity) {
if ($this->has($product)) {
$quantity = $this->get($quantity)['quantity'] + $quantity;
}
$this->update($product, $quantity);
}
public function update(Product $product, $quantity) {
if (!$this->product->find($product->id)->hasStock($quantity)) {
throw new QuantityExceededException;
}
if ($quantity === 0) {
$this->remove($product);
return;
}
$this->storage->set($product->id, [
'product_id' => (int) $product->id,
'quantity' => (int) $quantity,
]);
}
public function remove(Product $product) {
$this->storage->unset($product->id);
}
public function has(Product $product) {
return $this->storage->exists($product->id);
}
public function get(Product $product) {
return $this->storage->get($product->id);
}
public function clear() {
$this->storage->clear();
}
public function all() {
$ids = [];
$items = [];
foreach ($this->storage->all() as $product) {
$ids[] = $product['product_id'];
}
$products = $this->product->find($ids);
foreach ($products as $product) {
$product->quantity = $this->get($product)['quantity'];
$items[] = $product;
}
return $items;
}
public function itemCount() {
return count($this->storage);
}
}
?>
Quando clico num dos elementos a adicionar aparece uma página com informação como deveria aparecer. Aí quando altero o endereço para um produto que não existe ele retorna ao index. Por outro lado quando clico no produto e faço "Adicionar" ele adiciona e adiciona uma quantidade por defeito que é 1. Aqui quando tento modificar o endereço para um produto inexistente dá-me erro.
esta é a parte final do log de erros.
Código :
[Wed Jun 15 00:53:36.203942 2016] [mpm_prefork:notice] [pid 1008] AH00170: caught SIGWINCH, shutting down gracefully
[Thu Jun 16 20:38:53.531647 2016] [core:notice] [pid 1036] SELinux policy enabled; httpd running as context system_u:system_r:httpd_t:s0
[Thu Jun 16 20:38:53.791840 2016] [suexec:notice] [pid 1036] AH01232: suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Thu Jun 16 20:38:53.807760 2016] [auth_digest:notice] [pid 1036] AH01757: generating secret for digest authentication ...
[Thu Jun 16 20:38:53.808023 2016] [http2:warn] [pid 1036] AH02951: mod_ssl does not seem to be enabled
[Thu Jun 16 20:38:53.808541 2016] [lbmethod_heartbeat:notice] [pid 1036] AH02282: No slotmem from mod_heartmonitor
[Thu Jun 16 20:38:58.177760 2016] [mpm_prefork:notice] [pid 1036] AH00163: Apache/2.4.18 (Fedora) PHP/5.6.22 configured -- resuming normal operations
[Thu Jun 16 20:38:58.177783 2016] [core:notice] [pid 1036] AH00094: Command line: '/usr/sbin/httpd -D FOREGROUND'
[Thu Jun 16 20:38:58.421798 2016] [:warn] [pid 1199] ./mod_dnssd.c: No services found to register
[Thu Jun 16 20:45:32.998298 2016] [:error] [pid 1200] [client 127.0.0.1:44440] PHP Fatal error: Uncaught exception 'RuntimeException' with message 'Unexpected data in output buffer. Maybe you have characters before an opening <?php tag?' in /var/www/html/cart/vendor/slim/slim/Slim/App.php:552\nStack trace:\n#0 /var/www/html/cart/vendor/slim/slim/Slim/App.php(344): Slim\\App->finalize(Object(Slim\\Http\\Response))\n#1 /var/www/html/cart/vendor/slim/slim/Slim/App.php(298): Slim\\App->process(Object(Slim\\Http\\Request), Object(Slim\\Http\\Response))\n#2 /var/www/html/cart/public/index.php(5): Slim\\App->run()\n#3 {main}\n thrown in /var/www/html/cart/vendor/slim/slim/Slim/App.php on line 552
[Thu Jun 16 20:47:02.873741 2016] [:error] [pid 1201] [client 127.0.0.1:44566] PHP Fatal error: Uncaught exception 'RuntimeException' with message 'Unexpected data in output buffer. Maybe you have characters before an opening <?php tag?' in /var/www/html/cart/vendor/slim/slim/Slim/App.php:552\nStack trace:\n#0 /var/www/html/cart/vendor/slim/slim/Slim/App.php(344): Slim\\App->finalize(Object(Slim\\Http\\Response))\n#1 /var/www/html/cart/vendor/slim/slim/Slim/App.php(298): Slim\\App->process(Object(Slim\\Http\\Request), Object(Slim\\Http\\Response))\n#2 /var/www/html/cart/public/index.php(5): Slim\\App->run()\n#3 {main}\n thrown in /var/www/html/cart/vendor/slim/slim/Slim/App.php on line 552, referer: http://127.0.0.1/cart/public/products/bolivia-la-linda-washed-longberry
[Thu Jun 16 20:47:06.453515 2016] [:error] [pid 1201] [client 127.0.0.1:44566] PHP Fatal error: Uncaught exception 'RuntimeException' with message 'Unexpected data in output buffer. Maybe you have characters before an opening <?php tag?' in /var/www/html/cart/vendor/slim/slim/Slim/App.php:552\nStack trace:\n#0 /var/www/html/cart/vendor/slim/slim/Slim/App.php(344): Slim\\App->finalize(Object(Slim\\Http\\Response))\n#1 /var/www/html/cart/vendor/slim/slim/Slim/App.php(298): Slim\\App->process(Object(Slim\\Http\\Request), Object(Slim\\Http\\Response))\n#2 /var/www/html/cart/public/index.php(5): Slim\\App->run()\n#3 {main}\n thrown in /var/www/html/cart/vendor/slim/slim/Slim/App.php on line 552, referer: http://127.0.0.1/cart/public/
[Thu Jun 16 20:47:17.536169 2016] [:error] [pid 1201] [client 127.0.0.1:44566] PHP Fatal error: Uncaught exception 'RuntimeException' with message 'Unexpected data in output buffer. Maybe you have characters before an opening <?php tag?' in /var/www/html/cart/vendor/slim/slim/Slim/App.php:552\nStack trace:\n#0 /var/www/html/cart/vendor/slim/slim/Slim/App.php(344): Slim\\App->finalize(Object(Slim\\Http\\Response))\n#1 /var/www/html/cart/vendor/slim/slim/Slim/App.php(298): Slim\\App->process(Object(Slim\\Http\\Request), Object(Slim\\Http\\Response))\n#2 /var/www/html/cart/public/index.php(5): Slim\\App->run()\n#3 {main}\n thrown in /var/www/html/cart/vendor/slim/slim/Slim/App.php on line 552
[Thu Jun 16 20:50:22.028374 2016] [:error] [pid 1203] [client 127.0.0.1:44642] PHP Fatal error: Uncaught exception 'RuntimeException' with message 'Unexpected data in output buffer. Maybe you have characters before an opening <?php tag?' in /var/www/html/cart/vendor/slim/slim/Slim/App.php:552\nStack trace:\n#0 /var/www/html/cart/vendor/slim/slim/Slim/App.php(344): Slim\\App->finalize(Object(Slim\\Http\\Response))\n#1 /var/www/html/cart/vendor/slim/slim/Slim/App.php(298): Slim\\App->process(Object(Slim\\Http\\Request), Object(Slim\\Http\\Response))\n#2 /var/www/html/cart/public/index.php(5): Slim\\App->run()\n#3 {main}\n thrown in /var/www/html/cart/vendor/slim/slim/Slim/App.php on line 552
[Thu Jun 16 20:51:25.455605 2016] [:error] [pid 1206] [client 127.0.0.1:44666] PHP Fatal error: Uncaught exception 'RuntimeException' with message 'Unexpected data in output buffer. Maybe you have characters before an opening <?php tag?' in /var/www/html/cart/vendor/slim/slim/Slim/App.php:552\nStack trace:\n#0 /var/www/html/cart/vendor/slim/slim/Slim/App.php(344): Slim\\App->finalize(Object(Slim\\Http\\Response))\n#1 /var/www/html/cart/vendor/slim/slim/Slim/App.php(298): Slim\\App->process(Object(Slim\\Http\\Request), Object(Slim\\Http\\Response))\n#2 /var/www/html/cart/public/index.php(5): Slim\\App->run()\n#3 {main}\n thrown in /var/www/html/cart/vendor/slim/slim/Slim/App.php on line 552
[Thu Jun 16 20:38:53.531647 2016] [core:notice] [pid 1036] SELinux policy enabled; httpd running as context system_u:system_r:httpd_t:s0
[Thu Jun 16 20:38:53.791840 2016] [suexec:notice] [pid 1036] AH01232: suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Thu Jun 16 20:38:53.807760 2016] [auth_digest:notice] [pid 1036] AH01757: generating secret for digest authentication ...
[Thu Jun 16 20:38:53.808023 2016] [http2:warn] [pid 1036] AH02951: mod_ssl does not seem to be enabled
[Thu Jun 16 20:38:53.808541 2016] [lbmethod_heartbeat:notice] [pid 1036] AH02282: No slotmem from mod_heartmonitor
[Thu Jun 16 20:38:58.177760 2016] [mpm_prefork:notice] [pid 1036] AH00163: Apache/2.4.18 (Fedora) PHP/5.6.22 configured -- resuming normal operations
[Thu Jun 16 20:38:58.177783 2016] [core:notice] [pid 1036] AH00094: Command line: '/usr/sbin/httpd -D FOREGROUND'
[Thu Jun 16 20:38:58.421798 2016] [:warn] [pid 1199] ./mod_dnssd.c: No services found to register
[Thu Jun 16 20:45:32.998298 2016] [:error] [pid 1200] [client 127.0.0.1:44440] PHP Fatal error: Uncaught exception 'RuntimeException' with message 'Unexpected data in output buffer. Maybe you have characters before an opening <?php tag?' in /var/www/html/cart/vendor/slim/slim/Slim/App.php:552\nStack trace:\n#0 /var/www/html/cart/vendor/slim/slim/Slim/App.php(344): Slim\\App->finalize(Object(Slim\\Http\\Response))\n#1 /var/www/html/cart/vendor/slim/slim/Slim/App.php(298): Slim\\App->process(Object(Slim\\Http\\Request), Object(Slim\\Http\\Response))\n#2 /var/www/html/cart/public/index.php(5): Slim\\App->run()\n#3 {main}\n thrown in /var/www/html/cart/vendor/slim/slim/Slim/App.php on line 552
[Thu Jun 16 20:47:02.873741 2016] [:error] [pid 1201] [client 127.0.0.1:44566] PHP Fatal error: Uncaught exception 'RuntimeException' with message 'Unexpected data in output buffer. Maybe you have characters before an opening <?php tag?' in /var/www/html/cart/vendor/slim/slim/Slim/App.php:552\nStack trace:\n#0 /var/www/html/cart/vendor/slim/slim/Slim/App.php(344): Slim\\App->finalize(Object(Slim\\Http\\Response))\n#1 /var/www/html/cart/vendor/slim/slim/Slim/App.php(298): Slim\\App->process(Object(Slim\\Http\\Request), Object(Slim\\Http\\Response))\n#2 /var/www/html/cart/public/index.php(5): Slim\\App->run()\n#3 {main}\n thrown in /var/www/html/cart/vendor/slim/slim/Slim/App.php on line 552, referer: http://127.0.0.1/cart/public/products/bolivia-la-linda-washed-longberry
[Thu Jun 16 20:47:06.453515 2016] [:error] [pid 1201] [client 127.0.0.1:44566] PHP Fatal error: Uncaught exception 'RuntimeException' with message 'Unexpected data in output buffer. Maybe you have characters before an opening <?php tag?' in /var/www/html/cart/vendor/slim/slim/Slim/App.php:552\nStack trace:\n#0 /var/www/html/cart/vendor/slim/slim/Slim/App.php(344): Slim\\App->finalize(Object(Slim\\Http\\Response))\n#1 /var/www/html/cart/vendor/slim/slim/Slim/App.php(298): Slim\\App->process(Object(Slim\\Http\\Request), Object(Slim\\Http\\Response))\n#2 /var/www/html/cart/public/index.php(5): Slim\\App->run()\n#3 {main}\n thrown in /var/www/html/cart/vendor/slim/slim/Slim/App.php on line 552, referer: http://127.0.0.1/cart/public/
[Thu Jun 16 20:47:17.536169 2016] [:error] [pid 1201] [client 127.0.0.1:44566] PHP Fatal error: Uncaught exception 'RuntimeException' with message 'Unexpected data in output buffer. Maybe you have characters before an opening <?php tag?' in /var/www/html/cart/vendor/slim/slim/Slim/App.php:552\nStack trace:\n#0 /var/www/html/cart/vendor/slim/slim/Slim/App.php(344): Slim\\App->finalize(Object(Slim\\Http\\Response))\n#1 /var/www/html/cart/vendor/slim/slim/Slim/App.php(298): Slim\\App->process(Object(Slim\\Http\\Request), Object(Slim\\Http\\Response))\n#2 /var/www/html/cart/public/index.php(5): Slim\\App->run()\n#3 {main}\n thrown in /var/www/html/cart/vendor/slim/slim/Slim/App.php on line 552
[Thu Jun 16 20:50:22.028374 2016] [:error] [pid 1203] [client 127.0.0.1:44642] PHP Fatal error: Uncaught exception 'RuntimeException' with message 'Unexpected data in output buffer. Maybe you have characters before an opening <?php tag?' in /var/www/html/cart/vendor/slim/slim/Slim/App.php:552\nStack trace:\n#0 /var/www/html/cart/vendor/slim/slim/Slim/App.php(344): Slim\\App->finalize(Object(Slim\\Http\\Response))\n#1 /var/www/html/cart/vendor/slim/slim/Slim/App.php(298): Slim\\App->process(Object(Slim\\Http\\Request), Object(Slim\\Http\\Response))\n#2 /var/www/html/cart/public/index.php(5): Slim\\App->run()\n#3 {main}\n thrown in /var/www/html/cart/vendor/slim/slim/Slim/App.php on line 552
[Thu Jun 16 20:51:25.455605 2016] [:error] [pid 1206] [client 127.0.0.1:44666] PHP Fatal error: Uncaught exception 'RuntimeException' with message 'Unexpected data in output buffer. Maybe you have characters before an opening <?php tag?' in /var/www/html/cart/vendor/slim/slim/Slim/App.php:552\nStack trace:\n#0 /var/www/html/cart/vendor/slim/slim/Slim/App.php(344): Slim\\App->finalize(Object(Slim\\Http\\Response))\n#1 /var/www/html/cart/vendor/slim/slim/Slim/App.php(298): Slim\\App->process(Object(Slim\\Http\\Request), Object(Slim\\Http\\Response))\n#2 /var/www/html/cart/public/index.php(5): Slim\\App->run()\n#3 {main}\n thrown in /var/www/html/cart/vendor/slim/slim/Slim/App.php on line 552