Phalcon帶來的第一個完全用C語言編寫的PHP ORM。它簡化了開發(fā), 而不是增加了開發(fā)的復(fù)雜性。
創(chuàng)建我們的第一個模型之前,我們需要在Phalcon以外創(chuàng)建一個數(shù)據(jù)庫表。一個用來存儲注冊用戶的簡單表,可以這樣定義:
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). 這個模型對應(yīng)“users”表:
<?php use Phalcon\Mvc\Model; class Users extends Model { public $id; public $name; public $email; }
為了能夠使用一個數(shù)據(jù)庫連接,然后通過我們的模型訪問數(shù)據(jù),我們需要在我們的引導(dǎo)過程指定它。數(shù)據(jù)庫連接是我們的應(yīng)用程序可以使用的數(shù)個組件中的另一個服務(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ù)庫參數(shù),我們的模型已經(jīng)準(zhǔn)備和應(yīng)用程序的其余部分工作。
下一個步驟是從表單接收數(shù)據(jù)存儲在表中。
<?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í)例化用戶類,它對應(yīng)于一個用戶記錄。類的公共屬性映射到用戶表中的記錄的字段。在新記錄中設(shè)置相應(yīng)的值并調(diào)用save()將在數(shù)據(jù)庫中存儲的數(shù)據(jù)記錄。save()方法返回一個布爾值,表示存儲的數(shù)據(jù)是否成功。
ORM自動轉(zhuǎn)義輸入以防止SQL注入,所以我們只需要將請求傳遞給save()方法。
更多建議: