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