【问题标题】:Slim Framework - HTTP GET request with string that contains forward slashSlim 框架 - 带有包含正斜杠的字符串的 HTTP GET 请求
【发布时间】:2015-07-01 09:42:21
【问题描述】:

我正在使用 Slim 框架创建一些 Web 服务,以便在我的 Web 应用程序中按关键字进行搜索。我的问题是,当我按具有正斜杠 (/) 的关键字搜索时,slim 将斜杠解释为路由,响应为 404 not found

例如,如果我的关键字是:“One”,则对 /events/One 的 HTTP GET 请求将调用关联的回调函数,将“One”作为回调的参数传递。但是如果我的关键字是:“One/Two”,对/events/One/Two 的 HTTP GET 请求将调用相关的回调函数,因为 Slim 需要像这样的路由 events/:parm1/parm2

我该如何解决这个问题?

$app->get('/eventos/genero/:genero', 'findByGenero');

function findByGenero($genero) {
    $sql = "SELECT id, id_organizador, imagem, titulo, latitude, longitude, endDate, startDate, local, rua FROM eventos_sapo WHERE genero LIKE :genero ORDER BY titulo";
    try {
        $db = getConn();
        $stmt = $db->prepare($sql);
        $genero = "%".$genero."%";
        $stmt->bindParam("genero", $genero);
        $stmt->execute();
        $eventos = $stmt->fetchAll(PDO::FETCH_OBJ);
        $db = null;
        echo json_encode($eventos);
    } catch(PDOException $e) {
        echo '{"error":{"text":'. $e->getMessage() .'}}'; 
    }
}

【问题讨论】:

  • 在搜索之前对字符串进行urlencode。

标签: php slim


【解决方案1】:

如果 url 编码参数不起作用,那么您可以使用查询参数而不是路由参数:

$app->get('/eventos/genero', 'findByGenero');

function findByGenero() {
    $app = \Slim\Slim::getInstance();
    $genero = $app->request->get('q');

    if ($genero) {
        $sql = "SELECT id, id_organizador, imagem, titulo, latitude, longitude, endDate, startDate, local, rua FROM eventos_sapo WHERE genero LIKE :genero ORDER BY titulo";
        try {
            $db = getConn();
            $stmt = $db->prepare($sql);
            $genero = "%".$genero."%";
            $stmt->bindParam("genero", $genero);
            $stmt->execute();
            $eventos = $stmt->fetchAll(PDO::FETCH_OBJ);
            $db = null;
            echo json_encode($eventos);
        } catch(PDOException $e) {
            echo '{"error":{"text":'. $e->getMessage() .'}}'; 
        }
    }
}

网址现在是:/eventos/genero?q=2134

【讨论】:

    猜你喜欢
    • 2022-11-17
    • 2020-12-20
    • 2012-06-28
    • 1970-01-01
    • 2015-10-03
    • 2017-10-16
    • 2012-07-18
    • 1970-01-01
    • 2011-10-10
    相关资源
    最近更新 更多