PHP Slim - использование анонимных функций с простым API для отдыха - PullRequest
0 голосов
/ 07 октября 2018

Я создал простой API отдыха, который обрабатывает некоторые данные POST.Я хотел бы добавить некоторые функции для очистки данных перед отправкой ответа.

Я новичок в Slim и PHP, поэтому не уверен, возможно ли это / я решаю проблему, используя «правильный» подход.

Вот моя попытка (которая не работает!). Промежуточное программное обеспечение вызывается, но функция процесса всегда возвращает NULL

<?php
use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;

require __DIR__ . '/../vendor/autoload.php';

$app = new \Slim\App();


// add function to $app
$app->process = function ($request, $response, $next) use($app) {
    return 'process';
};

$process = $app->process;

// middleware
$mw = function ($request, $response, $next) {
    $response = $next($request, $response);   

    // should return string from above function
    $variable = $process

    $data = array('name' => $name, 'process' => $variable);
    $newResp = $response->withJson($data);
    return $newResp;
};


$app->post('/api/name', function (Request $request, Response $response, array $args) {
    $parsed= $request->getParsedBody();
    $response = $response->withStatus(200);
})->add($mw);

$app->run();
.

1 Ответ

0 голосов
/ 11 октября 2018

Было несколько проблем:

  1. Добавлена ​​функция к $app, в результате чего BadMethodCallException
  2. $app уже имеет метод с именем process
  3. Пропущено ; после $variable = $process

Этот код дает желаемый результат:

use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;

require __DIR__ . '/../vendor/autoload.php';

// turn error logging on!
$app = new \Slim\App(['settings' => ['displayErrorDetails' => true]]);

// your function
$sanitize = function(){
  return 'process';
};

// middleware + pass function
$mw = function ($request, $response, $next) use($sanitize) {
  $response = $next($request, $response);

  $variable = $sanitize(); // execute function

  $data = array('name' => $name, 'process' => $variable);
  $newResp = $response->withJson($data);
  return $newResp;
};


$app->get('/api/name', function (Request $request, Response $response, array $args) {
  $parsed= $request->getParsedBody();
  $response = $response->withStatus(200);
})->add($mw);

$app->run();  

Если вам не нужно использовать функции в другом промежуточном программном обеспечении,Вы можете просто определить функции в вашем промежуточном программном обеспечении, например:

// middleware
$mw = function ($request, $response, $next) use($sanitize) {
  $response = $next($request, $response);

  // your function
  function sanitize(){
    return 'process';
  }

  $data = array('name' => $name, 'process' => sanitize());
  $newResp = $response->withJson($data);
  return $newResp;
};
...