【问题标题】:How do I pass variables to a middleware function? [SLIM Framework]如何将变量传递给中间件函数? 【超薄框架】
【发布时间】:2016-03-27 18:05:09
【问题描述】:

我正在尝试将数据库变量传递给中间件函数。但是我收到以下错误:

致命错误:调用未定义的方法 Slim\Route::prepare() in /Applications/MAMP/htdocs/website/models/feedback.php 在第 11 行 代码:"$results = $db->prepare("INSERT INTO ..."

代码如下:

function newsletter(){

  $app = \Slim\Slim::getInstance();
  $route = $app->request->post('route');
  $email = $app->request->post('email_subscribe');
  $subscribe = $app->request->post("subscribe");
  $oFeedback = new Feedback();
  if(!empty($email)) {
    $cleanEmail = filter_var($email, FILTER_SANITIZE_EMAIL);
    $type="newsletter";
    $oFeedback->saveFeedback($db,NULL,$cleanEmail,NULL,$type);
  }
}

我在这样的路由中调用中间件函数:

$app->post('/triparticle', 'newsletter', function() use($app, $db){
})->name("triparticle_post");

你能帮帮我吗?

【问题讨论】:

    标签: php frameworks routes slim middleware


    【解决方案1】:

    你应该可以使用匿名函数来做到这一点。

    您的代码可能如下所示:

    $newsletter = function ($db){
        return function () use ($db){
    
          $app = \Slim\Slim::getInstance();
          $route = $app->request->post('route');
          $email = $app->request->post('email_subscribe');
          $subscribe = $app->request->post("subscribe");
          $oFeedback = new Feedback();
          if(!empty($email)) {
            $cleanEmail = filter_var($email, FILTER_SANITIZE_EMAIL);
            $type="newsletter";
            $oFeedback->saveFeedback($db,NULL,$cleanEmail,NULL,$type);
          }
        };
    };
    
    $app->post('/triparticle', $newsletter($db), function(){
    })->name("triparticle_post");
    

    这被描述为here。

    【讨论】:

      【解决方案2】:

      您不能将变量直接传递给中间件。 通过您的呼叫,您可以使用该变量调用一个空函数。 但是您可以将 var 嵌套到您的 $app 中,然后从中间件中获取它。

      【讨论】:

      • 如果您能展示一个在 $app 中嵌套变量的示例以及如何在中间件中访问这些变量,您的回答会更有帮助。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-23
      • 2020-12-20
      • 2011-06-21
      相关资源
      最近更新 更多