Ich bin ein neues in schlanken Rahmen und bin mit anonymen Funktionen von Routen auf Datenbankdaten mit einer bestimmten Route und ihre Arbeit zugreifen, aber wenn ich versuche, sie in einem Controller übergeben bekomme den Fehler BalgSlim 3 Controller nicht mit DB-Container verbinden
Slim Application Error The application could not run because of the following error:
Details
Type: Error Message: Call to undefined method Slim\Container::prepare() File: C:\xampp\htdocs\drivingapp\app\src\Controllers\apiController.php Line: 22 Trace
#0 [internal function]: App\Controllers\apiController->igice(Object(Slim\Http\Request), Object(Slim\Http\Response), Array)
#1 C:\xampp\htdocs\drivingapp\vendor\slim\slim\Slim\Handlers\Strategies\RequestResponse.php(41): call_user_func(Array, Object(Slim\Http\Request), Object(Slim\Http\Response), Array)
#2 C:\xampp\htdocs\drivingapp\vendor\slim\slim\Slim\Route.php(344): Slim\Handlers\Strategies\RequestResponse->__invoke(Array, Object(Slim\Http\Request), Object(Slim\Http\Response), Array)
#3 C:\xampp\htdocs\drivingapp\vendor\slim\slim\Slim\MiddlewareAwareTrait.php(116): Slim\Route->__invoke(Object(Slim\Http\Request), Object(Slim\Http\Response))
#4 C:\xampp\htdocs\drivingapp\vendor\slim\slim\Slim\Route.php(316): Slim\Route->callMiddlewareStack(Object(Slim\Http\Request), Object(Slim\Http\Response))
#5 C:\xampp\htdocs\drivingapp\vendor\slim\slim\Slim\App.php(438): Slim\Route->run(Object(Slim\Http\Request), Object(Slim\Http\Response))
#6 C:\xampp\htdocs\drivingapp\vendor\slim\slim\Slim\MiddlewareAwareTrait.php(116): Slim\App->__invoke(Object(Slim\Http\Request), Object(Slim\Http\Response))
#7 C:\xampp\htdocs\drivingapp\vendor\slim\slim\Slim\App.php(332): Slim\App->callMiddlewareStack(Object(Slim\Http\Request), Object(Slim\Http\Response))
#8 C:\xampp\htdocs\drivingapp\vendor\slim\slim\Slim\App.php(293): Slim\App->process(Object(Slim\Http\Request), Object(Slim\Http\Response))
#9 C:\xampp\htdocs\drivingapp\public\index.php(30): Slim\App->run()
#10 {main}
Im Folgenden meine apiController.php ist:
<?php
namespace App\Controllers;
use Slim\Views\Twig;
use Psr\Log\LoggerInterface;
use Slim\Http\Request;
use Slim\Http\Response;
class apiController{
private $db;
public function __construct($db){
$this->db = $db;
}
public function igice($request, $response){
$stmt = $this->db->prepare("SELECT * FROM igice ORDER BY igiceid");
$stmt->execute();
$dowork = $stmt->fetchAll();
return $this->response->withJson($dowork);
}
}
unten ist mein mein dependencie.php
$container['db'] = function ($c) {
$settings = $c->get('settings')['db'];
$pdo = new PDO("mysql:host=" . $settings['host'] . ";dbname=" . $settings['dbname'],
$settings['user'], $settings['pass']);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
return $pdo;
};
// -----------------------------------------------------------------------------
// Registering Controllers
// -----------------------------------------------------------------------------
$container[App\Action\HomeAction::class] = function ($c) {
return new App\Action\HomeAction($c->get('view'), $c->get('logger'));
};
$container['apiController']=function($c){
return new App\Controllers\apiController($c->get('db'));
};
Below its my routes.php:
$app->get('/ibice','App\Controllers\apiController:igice');
$ container [App \ Controllers \ apiController :: class] = function ($ c) { neue App \ Controllers zurückzukehren \ apiController ($ c-> get ('db')); }; – danopz