Wednesday, August 12, 2015

Sample Category GridView In Yii2.0

<?= GridView::widget([
    'dataProvider' => $dataProvider,
    'filterModel' => $searchModel,
    'columns' => [
        ['class' => 'yii\grid\SerialColumn'],

        'categoryid',
        'categoryname',
        'parentid',
        'createdon',
        // 'isactive',

        ['class' => 'yii\grid\ActionColumn'],
    ],
]); ?>


Gridview Options In Yii2.0

  <?= GridView::widget([
      'dataProvider' => $dataProvider,
      'filterModel' => $searchModel,
      'columns' => [
          ['class' => 'yii\grid\SerialColumn'],
 .........
          ['class' => 'yii\grid\ActionColumn'],
      ],
'options'=>['class'=>'grid-view gridview-newclass'],
  ]); ?>

Table Options In Yii2.0

  <?= GridView::widget([
      'dataProvider' => $dataProvider,
      'filterModel' => $searchModel,
      'columns' => [
          ['class' => 'yii\grid\SerialColumn'],
 .........
          ['class' => 'yii\grid\ActionColumn'],
      ],
'tableOptions' =>['class' => 'table table-striped table-bordered'],
  ]); ?>

Table Row Options In Yii2.0

  <?= GridView::widget([
      'dataProvider' => $dataProvider,
      'filterModel' => $searchModel,
      'columns' => [
          ['class' => 'yii\grid\SerialColumn'],
 .........
          ['class' => 'yii\grid\ActionColumn'],
      ],
'rowOptions'=>function ($model, $key, $index, $grid){
   $class=$index%2?'odd':'even';
   return array('key'=>$key,'index'=>$index,'class'=>$class);
  },
  ]); ?>

Gridview Layout Format In Yii2.0


  <?= GridView::widget([
      'dataProvider' => $dataProvider,
      'filterModel' => $searchModel,
'layout'=>"{sorter}\n{pager}\n{summary}\n{items}",
      'columns' => [
          ['class' => 'yii\grid\SerialColumn'],
 .........
          ['class' => 'yii\grid\ActionColumn'],
      ],
  ]); ?>

Gridview Summary Text, showFooter, showHeader In Yii2.0

  <?= GridView::widget([
      'dataProvider' => $dataProvider,
      'filterModel' => $searchModel,
'summary'=>'',
'showFooter'=>true,
'showHeader' => true,
      'columns' => [
          ['class' => 'yii\grid\SerialColumn'],
 .........
          ['class' => 'yii\grid\ActionColumn'],
      ],
  ]); ?>

Show/Hide GridView On Empty In Yii2.0

  <?= GridView::widget([
      'dataProvider' => $dataProvider,
      'filterModel' => $searchModel,
'showOnEmpty'=>true,
      'columns' => [
          ['class' => 'yii\grid\SerialColumn'],
 .........
          ['class' => 'yii\grid\ActionColumn'],
      ],
  ]); ?>




Hướng dẫn cấu hình  Enable clean URL in yii2 php Loại bỏ url thuần đi
Giúp cho các bạn có thể thay đổi đường dẫn theo controller và action.
Tạo file .htaccess
RewriteEngine on
# If a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Otherwise forward it to index.php
RewriteRule . index.php
Tiếp theo vào config ,tại web.php thêm vào phần components
 'urlManager' => [
        'class' => 'yii\web\UrlManager',
        // Disable index.php
        'showScriptName' => false,
        // Disable r= routes
        'enablePrettyUrl' => true,
        'rules' => array(
                '<controller:\w+>/<id:\d+>' => '<controller>/view',
                '<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
                '<controller:\w+>/<action:\w+>' => '<controller>/<action>',
        ),
        ],

Yii sử dụng mô hình MVC (Model-View-Controller: Vốn được sử dụng trong việc xây dựng các ứng dụng Client-Server nói chung) trong việc thiết kế kiến trúc cơ bản. MVC hướng tới việc phân chia các logic đặc thù trong việc giao tiếp với người dùng. Đại khái nó giúp bạn xử lý các phần khác nhau trong từng logic mà không làm ảnh hưởng tới phần khác. Mình khuyên các bạn nên tìm hiểu kỹ về MVC trước khi bắt tay vào lập trình trên Yii (mặc dù việc bắt tay vào làm luôn cũng không đến nỗi khó khăn cho lắm).

Trong mô hình MVC, model đại diện cho thông tin và các luật đối với thông tin đó! Ở đây bạn nào học ràng buộc trong môn thiết kế CSDL sẽ hiểu rõ hơn. View chứa các đối tượng tương tác trực tiếp với người dùng như là các nút, các textbox,... Controller sẽ giúp 2 thằng trước tương tác với nhau, nó đảm nhận việc xử lý dữ liệu, thu thập dữ liệu từ View hoặc đưa dữ liệu từ Model ra View...

Bên cạnh việc tận dụng mô hình MVC, Yii cũng giới thiệu đối tượng front-controller, gọi là Application. Application thu thập dữ liệu từ request của người dùng và đưa tới controller phù hợp để xử lý.


 

Cấu trúc của một ứng dụng Yii​



1. Workflow căn bản
Đồ thị bên dưới sẽ chỉ cho các bạn thấy một luồng xử lý căn bản của Yii khi nhận yêu cầu từ phía người dùng (Yêu cầu ở đây có thể là từ URL, từ Form,...)


 ​


Diễn giải từng bước như sau:
1. Người dùng sẽ gửi yêu cầu dưới dạng 1 URL dạng như http://abc.com/index.php?r=post/show&id=1 và trong đó abc.com là tên miền của bạn có thể sử dụng localhost và WebServer sẽ tiếp nhận yêu cầu đó bằng cách thực thi "bootstrap script" index.php!
2. Bootstrap script sẽ khởi tạo một instant Application và chạy nó.
3. Application có được thông tin yêu cầu của người dùng từ một một đối tượng bên trong application tên là request!
4. Application xác định controller và action mà yêu cầu gọi tới nhờ một thằng khác gọi là urlManager. Ví dụ ở đây controller nó gọi tới là post, action là id

(Hu hu hu, dịch tới đoạn này thì thật sự là mình không muốn dịch tiếp tí nào, đọc tiếng Anh còn dễ hiểu hơn ấy. Một phần mình không phải chuyên gia dịch tiếng Anh CNTT, 1 phần hồi trước học ngu mấy môn lập trình kinh khủng nên không nhớ các thầy gọi mấy từ chuyên môn trên là gì, thế nên bạn nào muốn tìm hiểu kỹ mấy phần Khái niệm cơ bản của Yii thì vào trang chủ của nó đọc sẽ rõ ràng hơn nhá. Tuy nhiên mình không phải google translate đâu nhá, công sức bỏ ra cả đấy)

5. Application tạo một instant controller tương ứng để tiếp tục xử lý yêu cầu của người dùng. Controller nhận biết được yêu cầu show tham chiếu tới phương thức tên là actionShow() trong controller class. Rồi nó thực thi bộ lọc của chính nó (PostController) liên quan tới yêu cầu trên (Cái này bạn bắt tay vào làm rồi từ từ sẽ hiểu). Nếu thỏa mãn hết các yêu cầu của bộ lọc thì action show sẽ được thực thi.
6. action load một model nào đó (ví dụ Post) với id =1 từ cơ sở dữ liệu
7. action sẽ render ra 1 view tên nào đó (ví dụ show)
8. view sẽ đọc và show ra các thuộc tính (attributes) của Post model
9. view lúc này có thể thực thi thêm 1 số widget (nếu được khai báo trong nó)
10. view hiển thị ra kết quả được nhúng giữa một layout!
11. action hoàn thành việc render ra view và hiển thị trên trình duyệt của người dùng!

Thursday, August 6, 2015


Làm ẩn index.php trên trang web tưởng chừng đơn giản.nhưng có nhiều người chưa biết.
Sau đây mình hướng dẫn làm ẩn index.php trên yii2 php framework.
Các bạn phải kích hoạt chế độ mod_rewrite trên hosting hoặc pc của mình, và sau đó tìm đến thư mục website của bạn và sửa file .htaccess

sau đó copy paste:
RewriteEngine on

# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# otherwise forward it to index.php
RewriteRule . index.php


save() OR insert()

$model = new User;
$model->name = 'YII';
$model->email = 'yii2@framework.com';
$model->save();  // equivalent to $model->insert();

insert() command

$connection->createCommand()
 ->insert('tbl_user', [
   'name' => 'yii',
   'status' => 1,])
 ->execute();

batchInsert()

$connection->createCommand()
  ->batchInsert('tbl_user', ['name', 'status'], 
  [
   ['Bala', 1],
   ['Akilan', 0],
   ['Babu', 1],
  ])
  ->execute();


Tất cả hướng dẫn đều được sử dụng trên Yii 2.0 bản Basic

- Vào basic/config/db.php: (basic là tên thư mục gốc)

<?php
return [
 'class' => 'yii\db\Connection',
    'dsn' => 'mysql:host=localhost;dbname=reportsa_macromoney', // MySQL, MariaDB
    //'dsn' => 'sqlite:/path/to/database/file', // SQLite
    //'dsn' => 'pgsql:host=localhost;port=5432;dbname=mydatabase', // PostgreSQL
    //'dsn' => 'cubrid:dbname=demodb;host=localhost;port=33000', // CUBRID
    //'dsn' => 'sqlsrv:Server=localhost;Database=mydatabase', // MS SQL Server, sqlsrv driver
    //'dsn' => 'dblib:host=localhost;dbname=mydatabase', // MS SQL Server, dblib driver
    //'dsn' => 'mssql:host=localhost;dbname=mydatabase', // MS SQL Server, mssql driver
    //'dsn' => 'oci:dbname=//localhost:1521/mydatabase', // Oracle
    'username' => 'root',
    'password' => '$123',
    'charset' => 'utf8',
 ];
?>  

- Tiếp theo vào basic/web/config/web.php:

'components' => [    
  'db'=>require(__DIR__ . '/db.php'),
  .................
 ]

Tuesday, August 4, 2015

Trong mục Yii Framework này mình sẽ hướng dẫn các bài cài đặt và sử dụng Yii2 Framework. Ở phiên bản Yii 2.0 này Yii ra hai phiên bản là Yii2 Basic và Yii2 Advance. Trong phần này ta sẽ sử dụng Yii2 Advance:

Để cài đặt Yii framework chúng ta có 2 cách: Cách thứ nhất là dùng Composer, cách thứ hai là tải Source về và làm thủ công. Ở đây tôi sẽ trình bày cách cài đặt dùng composer.

Tại sao lại dùng Composer? Vì nó rất tiện lợi, sau này các bạn muốn cài thêm extensions cho Yii thì chỉ cần vào Composer enter vài dòng lệnh là xong

- Download Composer các bạn truy cập vào trang chủ và down bản cài đặt theo hệ điều hành mà bạn sử dụng. Ở đây mình dùng Windows nên mình down bản setup.exe. Sau đó bạn tải về cài đặt như phần mềm bình thường.





- Chú ý đến bước này các bạn cần chọn file php.exe trong server local của mình, Mình sử dụng xampp và đây là đường dẫn đến file php.exe


- Tiếp tục cài đặt cho đến hết nhé. Sau khi cài xong bạn mở cần tải file composer.phar về máy nhé.
- Bạn mở cửa sổ Command Lịne (Cửa sổ + R) và truy cập vào Webserver của mình. Webser của mình là C:/xampp/htdocs.

Sau đó gõ dòng lệnh sau để tải file composer.phar về.
1
php -r "readfile('https://getcomposer.org/installer');" | php
Oke, bạn có thể xem ảnh sau


- Tiến hành cài đặt Yii2

- Bạn gõ vào dòng lệnh sau để download Yii2 về
1
composer create-project --prefer-dist --stability=dev yiisoft/yii2-app-advanced yii2adv
Trong đó thì "yii2-app-advanced" là phiên bản Yii2 Advanced, còn nếu bạn muốn cài phiên bản Basic thì thay thế bằng "yii2-app-basic". yii2adv là thư mục web của mình.





- Note : Trong quá trình download, composer sẽ download một số file từ github.com về. Nó sẽ yêu cầu username và pass tài khoản github, bạn nhập vào nhé.

- Nếu bạn muốn cài bằng bản Zip, thì bạn down ở đây. Sau đó giải nén vào thư mục project của mình. Khi bạn cài bằng bản Zip hoặc bằng Composer thì bạn chưa chạy được Yii2 luôn đâu nhé. Bạn cần mở Command Line và gõ vào lệnh sau

- Truy cập vào mục project của bạn sau đó gõ lệnh Init




- Tiếp theo Yii2 sẽ hỏi bạn muốn dùng trên Production hay Development, bạn tùy chọn 0 hoặc 1 sau đó chọn Yes nhé

Chờ đến khi chạy xong, ta sẽ thấy thư mục yii2adv trong thư mục xampp/htdocs chứa source của Yii2 Advanced như sau




- Với cấu trúc của Yii2 Adv thì đã phân cấp thành hai phần là Backend và Frontend rõ ràng

- Common là thư mục cấu hình database, chứa các model chung cho cả backend và frontend.
- Console là thự mục chạy bacth, chẳng hạn khi nào bạn muốn hẹn giờ để tự động chạy một chức năng nào đó
- Vendor là thư mục core của Yii2, chứa các extensions mở rộng

* Chạy Yii2 trên browse
1
http://localhost/yii2adv/frontend/web/





Như vậy là mình đã hướng dẫn các bạn cài đặt Yii2 Advanced thành công, Nếu bạn nào gặp khó khăn khi cài đặt cứ comment ở dưới nhé, Chúc vui
Yii là gì

Yii là một PHP framework cho phép phát triển nhanh chóng các ứng dụngWeb hiện đại. Tên Yii (phát âm là Yee hoặc [ji:]) có nghĩa là "đơn giản vàtiến hóa" ở Trung Quốc. Nó cũng có thể được coi như là một từ viết tắt cho Yes It Is!



Yii framework đặc biệt thích hợp cho việc phát triển các ứng dụng quy mô lớn như các cổng thông tin, diễn đàn, các hệ thống quản lý nội dung(CMS), các dự án thương mại điện tử, dịch vụ Web RESTful, và như vậy.
Làm thế nào để so sánh với Yii Frameworks khác?

Nếu bạn đã quen thuộc với các framework khác, bạn có thể thấy sự khác biệt giữa Yii framework và các framework khác:

Giống như hầu hết các PHP framework khác, Yii cũng chạy với mô hìnhMVC (Model-View-Controller) .

Mã của Yii được viết một cách đơn giản nhưng dể nhìn, dể sử dụng.

Yii là một bộ framework hoàn chỉnh cung cấp nhiều tính năng được xây dựng sẵng: xây dựng truy vấn và ActiveRecord cho cả hai cơ sở dữ liệurelational và NoSQL databases; Hỗ trợ phát triển API RESTful; nhiều tầnghỗ trợ caching; và nhiều hơn nữa.

Yii rất linh động. Bạn có thể tùy chỉnh hoặc thay thế gần như tất cả các phần của mã trong lõi Yii. Bạn cũng có thể tận dụng lợi thế của kiến trúcmở rộng trong Yii để sử dụng hoặc phát triển ứng dụng.

Hiệu suất cao luôn là một mục tiêu chính của Yii.

Yii framework được hỗ trợ bởi một đội ngũ phát triển mạnh mẽ, cũng nhưmột cộng đồng lớn của các chuyên gia liên tục đóng góp cho sự phát triểncủa Yii.

Các phiên bản Yii

Yii hiện có hai phiên bản chính có sẵn: 1.1 và 2.0. Phiên bản 1.1 là thế hệcũ và bây giờ là trong chế độ bảo trì. Phiên bản 2.0 được viết lại hoàn toàn của Yii, việc áp dụng các công nghệ mới nhất và các giao thức, bao gồm cả Composer, PSR, không gian tên, đặc điểm, và vân vân. Phiên bản 2.0đại diện cho các thế hệ hiện tại của khuôn khổ này và sẽ nhận đượcnhững nỗ lực phát triển chính trong vài năm tới.

Trong Blog này chủ yếu nói về phiên bản 2.0.

Yêu cầu và điều kiện tiên quyết

Yii 2.0 đòi hỏi PHP 5.4.0 hoặc cao hơn. Bạn có thể tìm thấy các yêu cầuchi tiết hơn cho các tính năng cá nhân bằng cách chạy chương trìnhrequirement checker trong mỗi bản phát hành Yii.

Sử dụng Yii đòi hỏi kiến thức cơ bản về lập trình hướng đối tượng (OOP),như Yii là một framework OOP. Yii 2.0 cũng sử dụng các tính năng mới nhất của PHP, chẳng hạn như namespaces and traits. Hiểu được nhữngkhái niệm này sẽ giúp bạn dễ dàng hơn với Yii 2.0.