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 Phalcon\Loader;
use Phalcon\Mvc\View;
use Phalcon\Mvc\Application;
use Phalcon\DI\FactoryDefault;
use Phalcon\Mvc\Url as UrlProvider;
use Phalcon\Db\Adapter\Pdo\Mysql 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 Phalcon\Loader
<?php
use Phalcon\Loader;
// ...
$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 Phalcon\DI\FactoryDefault;
// ...
// 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 Phalcon\Mvc\View;
// ...
// Setup the view component
$di->set('view', function() {
$view = new View();
$view->setViewsDir('../app/views/');
return $view;
});
Tiếp theo là URI
<?php
use Phalcon\Mvc\Url 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 Phalcon\Mvc\Application;
// ...
$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 Phalcon\Mvc\Controller;
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)