无法使用Slim框架4进行POST或PUT-在v3中可以正常工作

时间:2020-05-15 13:29:43

标签: php rest slim slim-4

我正在尝试学习苗条的框架,但我遇到了一个奇怪的问题。在Slim框架3中,它可以正常工作。 在发布此问题之前,我已经做了大量研究,但老实说,我发现的所有答案使其变得更加复杂。

我设法获取所有客户,获取单个客户并删除一个客户。 但是POST(新客户)或PUT(更新新客户)不起作用。

我会尽力提供更多信息。

Public index.php
    <?php
    use Psr\Http\Message\ResponseInterface as Response;
    use Psr\Http\Message\ServerRequestInterface as Request;
    use Slim\Factory\AppFactory;

    require __DIR__ . '/../vendor/autoload.php';
    require './src/config/db.php';

    $app = AppFactory::create();

    require './src/routes/customers.php';

    $app->run();

Config/db.php

    <?php
    /**
     * Connect MySQL with PDO class
     */
    class db {

      private $dbhost = 'localhost';
      private $dbuser = 'root';
      private $dbpass = 'root';
      private $dbname = 'api';

      public function connect() {

        // https://www.php.net/manual/en/pdo.connections.php
        $prepare_conn_str = "mysql:host=$this->dbhost;dbname=$this->dbname";

        $dbConn = new PDO( $prepare_conn_str, $this->dbuser, $this->dbpass );

        // https://www.php.net/manual/en/pdo.setattribute.php
        $dbConn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

        // return the database connection back
        return $dbConn;
      }
    }

最后是customers.php ...我只提供了POST和PUT,因为这两个都不起作用。

$app->post('/api/customer/add', function( Request $request, Response $response){

  $name = $request->getParam('name');
  $telephone = $request->getParam('telephone');
  $email = $request->getParam('email');
  $website = $request->getParam('website');
  $location = $request->getParam('location');

  $sql = "INSERT INTO CUSTOMERS (NAME, TELEPHONE, EMAIL, WEBSITE, LOCATION) 
          VALUES(:name,:telephone,:email,:website, :location)";

  try {
    $db = new db();
    $db = $db->connect();
    $stmt = $db->prepare($sql);

    $stmt->bindParam(':name', $name);
    $stmt->bindParam(':telephone', $telephone);
    $stmt->bindParam(':email', $email);
    $stmt->bindParam(':website', $website);
    $stmt->bindParam(':location', $location);
    $stmt->execute();
    echo '{"notice" : {"msg" : "New customers Added."}';
  } catch( PDOException $e ) {
    echo '{"error": {"msg": ' . $e->getMessage() . '}';
  }
});


$app->put('/api/update/{id}', function( Request $request, Response $response){

  $id = $request->getAttribute('id');

  $name = $request->getParam('name');
  $telephone = $request->getParam('telephone');
  $email = $request->getParam('email');
  $website = $request->getParam('website');
  $location = $request->getParam('location');

  $sql = "UPDATE CUSTOMERS SET 
          name = :name,
          telephone = :telephone,
          email = :email,
          website = :website,
          location = :location,
          WHERE id = $id";

  try {
    $db = new db();
    $db = $db->connect();

    $stmt = $db->prepare( $sql );

    $stmt->bindParam(':name', $name);
    $stmt->bindParam(':telephone', $telephone);
    $stmt->bindParam(':email', $email);
    $stmt->bindParam(':website', $website);
    $stmt->bindParam(':location', $location);

    $stmt->execute();

    echo '{"notice" : {"msg" : "Customer is Updated."}';
  } catch( PDOException $e ) {
    echo '{"error": {"msg": ' . $e->getMessage() . '}';
  }
});

错误消息

[16-May-2020 14:28:50 UTC] PHP Fatal error:  Uncaught Error: Call to undefined method Slim\Psr7\Request::getParam() in /Applications/MAMP/htdocs/MyApi/public/src/routes/customers.php:114
Stack trace:
#0 /Applications/MAMP/htdocs/MyApi/vendor/slim/slim/Slim/Handlers/Strategies/RequestResponse.php(43): {closure}(Object(Slim\Psr7\Request), Object(Slim\Psr7\Response), Array)
#1 /Applications/MAMP/htdocs/MyApi/vendor/slim/slim/Slim/Routing/Route.php(381): Slim\Handlers\Strategies\RequestResponse->__invoke(Object(Closure), Object(Slim\Psr7\Request), Object(Slim\Psr7\Response), Array)
#2 /Applications/MAMP/htdocs/MyApi/vendor/slim/slim/Slim/MiddlewareDispatcher.php(81): Slim\Routing\Route->handle(Object(Slim\Psr7\Request))
#3 /Applications/MAMP/htdocs/MyApi/vendor/slim/slim/Slim/MiddlewareDispatcher.php(81): Slim\MiddlewareDispatcher->handle(Object(Slim\Psr7\Request))
#4 /Applications/MAMP/htdocs/MyApi/vendor/slim/slim/Slim/Routing/Route.php(341): Slim\MiddlewareDispatcher->handle(Object(Slim\Psr7\Request))
#5 /Applications/MAMP/htdocs/MyApi/vendor/slim/slim/S in /Applications/MAMP/htdocs/MyApi/public/src/routes/customers.php on line 114

0 个答案:

没有答案
相关问题