搭配修身写一个RESTful Web服务
要创建一个Hello World应用程序,删除默认的index.php文件在应用程序目录,并创建一个新的index.php文件用下面的代码:
01 <?php
02 require "Slim/Slim.php";
03
04 // create new Slim instance
05 $app = new Slim();
06
07 // add new Route
08 $app->get("/", function () {
09 echo "<h1>Hello Slim World</h1>";
10 });
11
12 // run the Slim app
13 $app->run();
现在是准备你的第一个修身应用。如果你通过浏览器访问index.php文件,你应该看到一个大的“Hello斯利姆世界。”
在您的应用程序中使用的Slim,你需要包括Slim.php和斯利姆,会自动加载,它需要的所有其他文件。然后,您可以创建一个或多个实例修身对象,并添加您的路线。
苗条的构造函数接受一个应用程序的配置值的数组。模式,TEMPLATES.PATH和观看一些重要的,我们经常使用的配置。使用模式设置要像开发或生产,使用的应用环境。TEMPLATES.PATH设置使用模板文件的位置。斯利姆使用Slim_View的,默认情况下,呈现的观点,但您可以编写自定义的视图处理程序,并通过使用附加苗条价值。下面的示例演示如何创建一个新的自定义修身实例TEMPLATES.PATH和设置环境的发展模式。
1 <?php
2 $app = new Slim(array(
3 "MODE" => "development",
4 "TEMPLATES.PATH' => "./templates"
5 ));
创建一个应用程序使用斯利姆是创建路线的最重要组成部分。路由帮助一个URI映射到一个特定的请求方法的回调函数。斯利姆提供一个简单而直观的方式,以相同的URI映射的方法不同的要求。它将调用的回调函数,符合当前的URI和请求方法,或产生一个404错误,如果它是无法比拟的。加入航线后,你需要调用的run()方法修身实例运行的应用程序。
写一个图书馆服务
在更深入的运动,让我们创建一个简单的图书馆管理Web服务应用程序使用超薄。在此应用中,我们就可以列出,添加,删除,更新本书详细介绍了使用Web服务调用。
下表列出了将支持Web服务的端点:
对于数据库的交互中,我将使用NotORM书面JakubVrána作为替代ORM,它提供了一个简单而直观的API来与数据库中的数据,PHP库。NotORM使用PHP的PDO扩展来访问数据库,所以PDO的实例传递给NotORM的构造。
1 <?php
2 require "NotORM.php";
3
4 $pdo = new PDO($dsn, $username, $password);
5 $db = new NotORM($pdo);
上市书籍
第一个端点列出库中所有的书籍,让我们的使用超薄创建端点并返回JSON格式的编码数据。
01 <?php
02 ...
03 $app = new Slim(
04 "MODE" => "developement",
05 "TEMPLATES.PATH' => "./templates"
06 );
07
08 $app->get("/books", function () use ($app, $db) {
09 $books = array();
10 foreach ($db->books() as $book) {
11 $books[] = array(
12 "id" => $book["id"],
13 "title" => $book["title"],
14 "author" => $book["author"],
15 "summary" => $book["summary"]
16 );
17 }
18 $app->response()->header("Content-Type", "application/json");
19 echo json_encode($books);
20 });
()是修身的方法,路线到指定的URI上的GET请求。它的第一个参数是URI和最后一个参数是一个回调函数。使用关键字,使我们能够从匿名函数的范围内访问外部变量。
在函数中,我们创建,遍历数据库返回的每个记录(书的数组$ DB->图书()返回一个遍历参考的书籍表)。发送响应的Content-Type头为“应用程序/ json”我们发出的编码书数据阵列。
现在让我们写一本书与一个给定的ID的详细信息端点:
01 <?php
02 ...
03 $app->get("/book/:id", function ($id) use ($app, $db) {
04 $app->response()->header("Content-Type", "application/json");
05 $book = $db->books()->where("id", $id);
06 if ($data = $book->fetch()) {
07 echo json_encode(array(
08 "id" => $data["id"],
09 "title" => $data["title"],
10 "author" => $data["author"],
11 "summary" => $data["summary"]
12 ));
13 }
14 else{
15 echo json_encode(array(
16 "status" => false,
17 "message" => "Book ID $id does not exist"
18 ));
19 }
20 });
在这里,我们添加了一个参数,本书的ID传递路线。在执行这条路线,斯利姆将调用的回调函数作为参数的参数值。
请注意该参数是强制性的。您可以通过它放在像括号内可选:/书(/ ID),如果你正在做一个参数可选,不过,你将不能够指定的回调函数的参数。在这种情况下,你可以使用func_get_args()以任何参数传递给回调函数来获得。
添加和编辑书籍
现在,让我们的地址端点添加和更新图书信息负责。我们将使用后()方法来添加新的数据,并把()来更新现有的数据。
01 <?php
02 ...
03 $app->post("/book", function () use($app, $db) {
04 $app->response()->header("Content-Type", "application/json");
05 $book = $app->request()->post();
06 $result = $db->books->insert($book);
07 echo json_encode(array("id" => $result["id"]));
08 });
09
10 $app->put("/book/:id", function ($id) use ($app, $db) {
11 $app->response()->header("Content-Type", "application/json");
12 $book = $db->books()->where("id", $id);
13 if ($book->fetch()) {
14 $post = $app->request()->put();
15 $result = $book->update($post);
16 echo json_encode(array(
17 "status" => (bool)$result,
18 "message" => "Book updated successfully"
19 ));
20 }
21 else{
22 echo json_encode(array(
23 "status" => false,
24 &q
补充:Web开发 , php ,