我用这样的方式来定义我的路线:
$pathname = 'Users/????/gyb/GYB-GMail-Backup-xxxxx@gmail.com/2015/'.$m .'/'.$d.'/';
echo $pathname;
$filename = $pathname.$d.'-81.eml';
$texttofind = "Subject:";
$file = new SplFileObject($filename);
$bort = FALSE;
$grabbed = FALSE;
foreach($file as $line) {
if(strpos($line, $texttofind) !== FALSE) {
$grabbed = $line;
}
}
echo $grabbed;
if(strpos($grabbed, "ref12345") === FALSE) {
echo "ref12345 does not exist in this file";
}
然后我可以在我的处理程序中使用整个请求对象。
但现在我想使用绑定路由,例如:
(GET "/home" [req] (home-page req))
在这种情况下,似乎我无法同时获取请求和绑定参数。我试过了:
(GET "/details/:id" [id] (details-page id))
但是请求没有。
有没有办法在带绑定的路由上获取请求?
我想要绑定所以我不必做以下事情:
(GET "/details/:id" [id req] (details-page id req))
,然后(GET "/details" [req] (details-page req))
我需要访问会话和请求标头的请求。
任何建议?
提前感谢。
答案 0 :(得分:4)
Compojure的绑定向量解析针对参数进行了优化,并且不是很灵活,但幸运的是,您可以使用针对棘手情况的请求的常规基于地图的解构:
(GET "/details/:id" {:keys [id] :params :as req} (details-page id req))
应该工作。
答案 1 :(得分:1)
(GET "/details/:id" req (details-page (-> req :params :id) req))
这个片段有效,解决了我的问题,但我会喜欢更简单的东西(DRY)。
答案 2 :(得分:1)
根据https://github.com/weavejester/compojure/wiki/Destructuring-Syntax,您应该可以通过将req
添加到绑定向量来将:as req
绑定到整个请求:
(GET "/details/:id" [id :as req] (details-page id req))