Mais conteúdo relacionado Semelhante a 20160105 wnmp & phalcon micro app - part II (20) 20160105 wnmp & phalcon micro app - part II2. Agenda
• Part I
– Windows
• nginx
• php
• Phalcon
• Part II
– mysql
– micro-restful api
2
4. Phalcon
• Download Phalcon form https://phalconphp.com/en/download/windows
• Copy php_phalcon.dll to php extension dir
– ex: C:webphpext
• Modify the configuration from php.ini-development to php.ini
– extension=php_phalcon.dll
• Phalcon Dev Tool
– Download: https://phalconphp.com/en/download/tools
– Docs: https://docs.phalconphp.com/en/latest/reference/tools.html
– Source: https://github.com/phalcon/phalcon-devtools
4
5. Phalcon – Nginx configuration
5
source: https://docs.phalconphp.com/en/latest/reference/nginx.html
6. Target - AddressBook
API resource Method Raw Body
select a contact addressbook/{Id} GET
select multi contacts addressbook GET
create contact addressbook POST {"name":"taien","mobile":"0912111
111"}
modify contact addressbook/{Id} PUT {"name":"taien","mobile":"0912111
111"}
delete contact addressbook/{Id} DELETE
6
URL:http://tku.api.taien.idv.tw:8080/
8. MySQL
• Download PHP form https://dev.mysql.com/downloads/mysql/
– mysql-installer-community-5.6.28.0.msi
8
24. MySQL – Create databases
• mysql –h localhost –u root –p
• CREATE DATABASE `tku-sample` CHARACTER SET utf8 COLLATE utf8_general_ci;
• use `tku-sample`;
• CREATE TABLE `addressbook` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(45) NOT NULL,
`mobile` varchar(45) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
24
25. Windows Environment Variables
• Environment Variables
– Path
• C:webphp;C:webnginx;C:webphalcon-devtools-master;C:Program
FilesMySQLMySQL Server 5.7bin
25
26. Phalcon Micro App Command
• Create project
– phalcon project tku --type=mirco
• Setup DB in config/config.php
• Create ORM model
– phalcon model addressbook
26
30. Phalcon Code - Hello TKU
$app->get('/tku', function () use ($app) {
echo "Hello, TKU!";
});
30
31. Phalcon Code - Select a contact
$app->get('/addressbook/{addressbookId}', function ($addressbookId) use ($app) {
$response = new Response();
$AddressBook = Addressbook::findFirst($addressbookId);
$data = array();
if ($AddressBook) {
$data["id"] = $AddressBook->id;
$data["name"] = $AddressBook->name;
$data["mobile"] = $AddressBook->mobile;
echo json_encode($data);
} else {
$response->setStatusCode(404, "Not Found");
return $response;
}});
31
32. Phalcon Code - Select multi contacts
$app->get('/addressbook', function () use ($app) {
$AddressBooks = Addressbook::find();
$data = array();
foreach ($AddressBooks as $AddressBook) {
$data[] = array(
'id' => $AddressBook->id,
'name' => $AddressBook->name,
'mobile' => $AddressBook->mobile);
}
echo json_encode($data);
});
32
33. Phalcon Code - Create contact
$app->post('/addressbook', function () use ($app) {
$response = new Response();
$bodyData = $app->request->getJsonRawBody();
$requestAry = json_decode(json_encode($bodyData), true);
$AddressBook = new Addressbook;
$AddressBook->name = $requestAry["name"];
$AddressBook->mobile = $requestAry["mobile"];
$result = $AddressBook->save();
if ($result) {
$response->setStatusCode(201, "Created");
} else {
$response->setStatusCode(500, "Internal Error");
}
return $response;
});
33
34. Phalcon Code - Modify contact
$app->put('/addressbook/{addressbookId}', function ($addressbookId) use ($app) {
$response = new Response();
$bodyData = $app->request->getJsonRawBody();
$requestAry = json_decode(json_encode($bodyData), true);
$AddressBook = Addressbook::findFirst($addressbookId);
if ($AddressBook) {
$AddressBook->name = $requestAry["name"];
$AddressBook->mobile = $requestAry["mobile"];
$result = $AddressBook->save();
if ($result) {
$response->setStatusCode(202, "Accepted");
} else {
$response->setStatusCode(500, "Internal Error");
}
} else {
$response->setStatusCode(500, "Internal Error");
}
return $response;
});
34
35. Phalcon Code - Delete contact
$app->delete('/addressbook/{addressbookId}', function ($addressbookId) use ($app) {
$response = new Response();
$AddressBook = Addressbook::findFirst($addressbookId);
if ($AddressBook) {
$result = $AddressBook->delete();
if ($result) {
$response->setStatusCode(202, "Accepted");
} else {
$response->setStatusCode(500, "Internal Error");
}
} else {
$response->setStatusCode(500, "Internal Error");
}
return $response;
});
35
36. Mission
• 20%: Select a contact
• 20%: Select multi contact
• 20%: Create a contact
• 20%: Modify a contact
• 20%: Delete a contact
36