我使用Slim进行开发。我所有的GET路线都运行得很好,但每当我使用POST时,我都会得到意想不到的结果"。请看看我是如何实施苗条的,以及"意外错误"。
index-routes.php(索引根文件)
<?php
require 'Slim/Slim.php';
\Slim\Slim::registerAutoloader();
$app = new \Slim\Slim(array(
'debug' => true
));
require_once 'site-index.php';
require_once 'routes/default-routes.php';
$app->contentType('application/json');
$app->run();
?>
路由/默认-routes.php文件
<?php
$app->post('/login',function(){
echo 'AllHailSuccess!';
})
?>
通过AJAX调用的POST请求的来源
function try1()
{
var value1 = "afsfesa";
API.call('/login','text','POST',function(data){console.log(data)},{var1:value1});
}
AJAX Call API
var API = {
call:function(url,returnType,reqType,callback,data){
var data = (!!data) ? data : {};
var callback = (!!callback) ? callback : function(){};
$.ajax({
dataType: returnType,
type:reqType,
crossDomain: true,
xhrFields: { withCredentials: true },
url: url,
data:data,
success:callback,
error:function(data){
console.log("Error!");
console.log(data);
}
});
}
}
&#34;意外错误&#34;:当我执行try1()时,POST ROUTE已成功执行,但是site-index.php的内容(纯文本中的完整代码)(我在其中调用) root index-routes.php文件)也会随之记录。我之所以首先导入site-index.php,是因为它就像一个&#34;主要阶段&#34;对于我的网站。它是我想要加载的唯一页面,用户可以在其中导航。
感谢任何帮助。谢谢。
答案 0 :(得分:0)
您的Slim通话将返回页面上显示的任何内容。
有几种方法可以解决这个问题:
在您显示的示例中,AllHailSuccess!
site-index.php
许多人使用模板软件渲染他们的页面,然后使用服务通过模板渲染他们的页面。对于更基本的网站,我建议您创建一个简单的服务来显示内容。
这是我在项目中使用的Viewer
类的简单示例
class Viewer {
/**
* Display the specified filename using the main template
* @param string $filepath The full path of the file to display
*/
public function display($filepath) {
//set a default value for $body so the template doesn't get angry when $body is not assigned.
$body = "";
if (file_exists($filepath)) {
$body = get_include_contents($filepath);
} else {
//You want to also return a HTTP Status Code 404 here.
$body = get_include_contents('404.html');
}
//render the page in the layout
include('layout.php');
}
}
/**
* Gets the contents of a file and 'pre-renders' it.
* Basically, this is an include() that saves the output to variable instead of displaying it.
*/
function get_include_contents($filepath, $params = array()) {
if (is_file($filepath)) {
ob_start();
include $filepath;
$ret = ob_get_contents();
ob_end_clean();
return $ret;
}
return false;
}
您想要向用户显示页面布局的路线现在应该如下所示:
$app->get('/', function() {
(new Viewer())->display('home.html');
});
这绝不是一个全面的解决方案,因为它没有解决正确的HTTP状态代码,并且代码中的文件直接被引用会变得混乱,但它是一个很好的起点,它可以快速模拟这样的东西起来。
如果你想继续这个方向,我建议你看一下Slim v2 Response Documentation并创建一个构造并返回Response对象的类。这将为您提供更多的灵活性和功能来设置HTTP状态代码和HTTP返回标头。
我强烈建议您查看Slim v3 Responses,因为Slim 3使用的PSR-7响应对象是多个框架的标准对象。