2015-04-23 25 views
2

我正在使用Slim框架創建一些Web服務,以便在我的Web應用程序中通過關鍵字進行搜索。我的問題是,當我通過關鍵字搜索具有正斜槓(/)時,slim將斜線解釋爲路線,響應是404 not foundSlim框架 - 包含正斜槓的字符串的HTTP GET請求

例如,如果我的關鍵字是:「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() .'}}'; 
    } 
} 
+0

進行urlencode搜索字符串前爲了它。 – Frank

回答

0

如果URL編碼參數一點兒也不工作,那麼你可以使用查詢paraemter而不是路由參數:

$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() .'}}'; 
     } 
    } 
} 

的URL現在是:/eventos/genero?q=2134