我是一个新的苗条框架,并使用路由的匿名功能来访问给定路由及其工作的数据库数据,但如果我尝试在控制器中传递它们我得到错误波纹管
超薄应用程序错误由于以下错误,应用程序无法运行:详细信息类型:错误消息:调用未定义的方法Slim \ Container :: prepare()文件:C:\ xampp \ htdocs \ drivingapp \ app \ src \ Controllers \ apiController.php行:22跟踪#0 [内部函数]:App \ Controllers \ apiController-> igice(对象(Slim \ Http \ Request),对象(Slim \ Http \ Response),数组)#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),数组)#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-> callMiddlewareSt ack(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
下面是我的apiController.php:
<?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);
}
}
吼一声,这是我的我的dependdencie.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'));
};
在我的routes.php下面:
$app->get('/ibice','App\Controllers\apiController:igice');
2 回答
修改apiController.php
那么你应该为每条路线编写函数,我给你举个例子
修改dependencies.php
最好将容器添加到apiController构造函数中,以便轻松访问包括db在内的所有容器对象,这样您就可以像这样轻松地更改代码:
只需将__get magic方法添加到控制器中,您就可以使用$ this-> dependency name;轻松访问控制器中的所有容器对象;)
在您的依赖项中:
并为路线:
和你的一样