[Phalcon] Phần 1: Cùng làm ví dụ đầu tiên
Phalcon không bắt buộc phải tạo cấu trúc theo quy định, nhưng để đơn giản ta hãy tạo theo cấu trúc sau.
tutorial/
app/
controllers/
models/
views/
public/
css/
img/
js/
Beautiful URLs
Nghĩa là các url đẹp. VD: https://www.thegioididong.com/, …Khi chúng ta chạy project thì chỉ cần chạy tên project là nó sẽ hiện ra trang web. Cụ thể trong ví dụ này là tutorial. Điều này rất có lợi trong việc SEO.
Chúng ta sẽ tạo file .htaccess
theo thư mục /tutorial/.htaccess
#/tutorial/.htaccess
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^$ public/ [L]
RewriteRule (.*) public/$1 [L]
</IfModule>
và /tutorial/public/.htaccess
#/tutorial/public/.htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?_url=/$1 [QSA,L]
</IfModule>
Để hiểu file .htaccess
là gì thì tham khảo thêm tại: http://freetuts.net/file-htaccess-la-gi-76.html
Chú ý: Vì trong windows không cho phép ta tạo file mà không có tên phía trước. Vì thế có 1 cách đó là tạo 1 file .php
, sau đó viết đoạn code:
<?php fopen(".htaccess", "w"); ?>
Cuối cùng chạy file này lên thì nó sẽ tạo ra file .htaccess
, sau đó ta edit nó và gõ đoạn code như trên.
Bootstrap
Đây không phải là thư viện bootstrap để tạo giao diện, mà ở đây là file khi trang web chạy, nó sẽ chạy file này đầu tiên. Nó rất quan trọng. Tạo file theo đường dẫn tutorial/public/index.php
<?php
use PhalconLoader;
use PhalconMvcView;
use PhalconMvcApplication;
use PhalconDIFactoryDefault;
use PhalconMvcUrl as UrlProvider;
use PhalconDbAdapterPdoMysql as DbAdapter;
try {
// Register an autoloader
$loader = new Loader();
$loader->registerDirs(array(
'../app/controllers/',
'../app/models/'
))->register();
// Create a DI
$di = new FactoryDefault();
// Setup the view component
$di->set('view', function(){
$view = new View();
$view->setViewsDir('../app/views/');
return $view;
});
// Setup a base URI so that all generated URIs include the "tutorial" folder
$di->set('url', function(){
$url = new UrlProvider();
$url->setBaseUri('/tutorial/');
return $url;
});
// Handle the request
$application = new Application($di);
echo $application->handle()->getContent();
} catch (Exception $e) {
echo "PhalconException: ", $e->getMessage();
}
?>
Chúng ta sẽ phân tích đoạn code này:
Autoloaders
Khi chạy đoạn code này, nó sẽ load class controllers và models trong project. Ngoài ra có thể đăng ký load nhiều hơn. Để dùng chúng ta dùng PhalconLoader
<?php
use PhalconLoader;
// ...
$loader = new Loader();
$loader->registerDirs(
array(
'../app/controllers/',
'../app/models/'
)
)->register();
Dependency Management
Đây là một khái niệm rất quan trọng khi sử dụng Phalcon. Nó giống như một cái túi lớn chứa những service khác mà chương trình sẽ sử dụng. Phalcon là một framework có tính phân chia cao, nhưng nó sẽ gộp chúng lại để sử dụng.
<?php
use PhalconDIFactoryDefault;
// ...
// Create a DI
$di = new FactoryDefault();
Ở đây chúng ta đăng ký service View. View khác với Model và Controller, nó không phải là class nên không thể đăng ký autoloader. Vì thế ta đăng ký trong DI.
<?php
use PhalconMvcView;
// ...
// Setup the view component
$di->set('view', function() {
$view = new View();
$view->setViewsDir('../app/views/');
return $view;
});
Tiếp theo là URI
<?php
use PhalconMvcUrl as UrlProvider;
// ...
// Setup a base URI so that all generated URIs include the "tutorial" folder
$di->set('url', function(){
$url = new UrlProvider();
$url->setBaseUri('/tutorial/');
return $url;
});
Cuối cùng là:
<?php
use PhalconMvcApplication;
// ...
$application = new Application($di);
echo $application->handle()->getContent();
ta có thể hiểu đây là dòng để buid chạy chương trình.
Creating a Controller
Controller khi được đặt tên là Index thì nó sẽ là file đầu tiên khi không có controller hoặc action nào được yêu cầu. Tạo file controller theo app/controllers/IndexController.php
<?php
use PhalconMvcController;
class IndexController extends Controller
{
public function indexAction()
{
echo "<h1>Hello!</h1>";
}
}
Bây giờ bạn mở XAMPP lên và chạy thử project xem thế nào. Đường dẫn là http://localhost/tutorial/ .
Kết quả:
Vậy là bạn đã làm xong một ví dụ nhỏ bằng Phalcon.
(còn tiếp)
Wow, rất công phu. Cảm ơn @Hoa_Hoa nhé, @Hoa_Hoa thực sự khác với @Hoa_Hoa ngày lập topic đầu tiên trên diễn đàn rồi
Keep it up!
Nghe nói cái Framework Falcon này được viết bằng ngôn ngữ C và có hiệu suất cao hơn hẳn các framework PHP khác.
Bài viết rất chi tiết cảm ơn bạn nhiều !!!
Phalcon chuyển PHP code sang C/C++ thôi (gần với binary code) nên nếu chạy kiểu thuần túy thì nó nhanh hơn là đúng rồi. Tuy nhiên, hiện nay mấy ai chạy PHP kiểu thuần túy (thông dịch).
thì Phalcon có khi còn chẳng bằng luôn. Còn chưa thấy công nghệ chạy AOT compiler (Ahead of Time).
Giờ PHP cũng giả lập đa luồng (thực ra là đa process, và bắt chước event drivent programming như NodeJS), thậm chí không cần opcode mà vẫn cho tốc độ tốt gấp 15 lần.
GitHub
php-pm/php-pm
PPM is a process manager, supercharger and load balancer for modern PHP applications. - php-pm/php-pm