Phalcon帶來(lái)的第一個(gè)完全用C語(yǔ)言編寫(xiě)的PHP ORM。它簡(jiǎn)化了開(kāi)發(fā), 而不是增加了開(kāi)發(fā)的復(fù)雜性。
創(chuàng)建我們的第一個(gè)模型之前,我們需要在Phalcon以外創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)表。一個(gè)用來(lái)存儲(chǔ)注冊(cè)用戶(hù)的簡(jiǎn)單表,可以這樣定義:
CREATE TABLE `users` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(70) NOT NULL, `email` varchar(70) NOT NULL, PRIMARY KEY (`id`) );
模型應(yīng)該位于 app/models 目錄 (app/models/Users.php). 這個(gè)模型對(duì)應(yīng)“users”表:
<?php use Phalcon\Mvc\Model; class Users extends Model { public $id; public $name; public $email; }
為了能夠使用一個(gè)數(shù)據(jù)庫(kù)連接,然后通過(guò)我們的模型訪(fǎng)問(wèn)數(shù)據(jù),我們需要在我們的引導(dǎo)過(guò)程指定它。數(shù)據(jù)庫(kù)連接是我們的應(yīng)用程序可以使用的數(shù)個(gè)組件中的另一個(gè)服務(wù):
<?php try { $loader = new Phalcon\Loader(); $loader->registerDirs(array( '../app/controllers/', '../app/models/' ))->register(); $di = new Phalcon\FactoryDefault(); $di->set('db', function () { return new Phalcon\Db\Adapter\Mysql(array( "host" => "localhost", "username" => "root", "password" => "secret", "dbname" => "test_db" )); }); $di->set('view', function () { $view = new Phalcon\Mvc\View(); $view->setViewsDir('../app/views/'); return $view; }); $di->set('url', function () { $url = new Phalcon\Mvc\Url(); $url->setBaseUri('/tutorial/'); return $url; }); $application = new Application($di); echo $application->handle()->getContent(); } catch (\Exception $e) { echo "Exception: ", $e->getMessage(); }
使用正確的數(shù)據(jù)庫(kù)參數(shù),我們的模型已經(jīng)準(zhǔn)備和應(yīng)用程序的其余部分工作。
下一個(gè)步驟是從表單接收數(shù)據(jù)存儲(chǔ)在表中。
<?php use Phalcon\Mvc\Controller; class SignupController extends Controller { public function indexAction() { } public function registerAction() { $user = new Users(); // Store and check for errors $success = $user->save($this->request->getPost(), array('name', 'email')); if ($success) { echo "Thanks for registering!"; } else { echo "Sorry, the following problems were generated: "; foreach ($user->getMessages() as $message) { echo $message->getMessage(), "<br/>"; } } $this->view->disable(); } }
然后我們實(shí)例化用戶(hù)類(lèi),它對(duì)應(yīng)于一個(gè)用戶(hù)記錄。類(lèi)的公共屬性映射到用戶(hù)表中的記錄的字段。在新記錄中設(shè)置相應(yīng)的值并調(diào)用save()將在數(shù)據(jù)庫(kù)中存儲(chǔ)的數(shù)據(jù)記錄。save()方法返回一個(gè)布爾值,表示存儲(chǔ)的數(shù)據(jù)是否成功。
ORM自動(dòng)轉(zhuǎn)義輸入以防止SQL注入,所以我們只需要將請(qǐng)求傳遞給save()方法。
更多建議: