Instrukcja do ćwiczeń

# 1. Tworzymy nową aplikacje
############################

mkdir yii2
cd yii2

# tworzenie aplikacji yii2 o nazwie test123
composer create-project yiisoft/yii2-app-basic test123 2.0.8

# lokalnie można zrobić test na porcie 8888

cd test123
php yii serve --port=8888

# 2. Własny szablon o nazwie th1
############################

# 2.1. - metoda prosta - tylko plik widoku
cd views/layouts
cp main.php widok1.php
vi widok1.php

vi ../../config/web.php
dodajemy:
$config = [
    'id' => 'basic',
    'layout'=>'widok1',

# ewentualne css,js i inne zasoby (assets): 
cd ../../assets
vi AppAsset.php
# zwroc uwage na AppAsset::register($this); w szablonie

# 2.2. - robimy widoki w podkatalogu themes

mkdir themes
cd themes
mkdir th1
cd th1
cp -p -R ../../views/layouts .

cd ../..
vi config/web.php

do sekcji
    'components' => [
dopisz:
       'view' => [
        'theme' => [
         'pathMap' => ['@app/views' => '@app/themes/th1'],
         'baseUrl' => '@web/themes/th1',
         'basePath' => '@app/themes/th1',
         ],
        ],

3. Proste adresy:
#################

odkomentowac urlManager w config/web.php

4. Tworzymy moduł
############################

/modules
 /m1
  /controllers
  /views
  /models


WAŻNE!
Podkatalog modules niekonieczny.
Pamietaj o przedrostku app\ w namespaces (odnosi się do aplikacji -  
- w przeciwienstwie do vendors...)

m1/m1Module.php
===============
<?php

namespace app\modules\m1;
class m1Module extends \yii\base\Module {
    public $controllerNamespace = 'app\modules\m1\controllers';

}


m1/controllers/DefaultController.php
===================================
<?php
namespace app\modules\m1\controllers;
use yii\web\Controller;
class DefaultController extends Controller {
    public function actionIndex()  {
        return $this->render('index');
    }
}

m1/views/default/index.php
==========================
coś


dodajemymodul w config/web.php:
===============================
'modules' => [
'm1' => ['class' => 'app\modules\m1\m1Module',],
]

#5. Podłączamy bazę danych
##########################
# na przyklad db0068

vi config/db.php

 'dsn' => 'mysql:host=dev.pwste.edu.pl;dbname=db0068',
 'username' => 'dev',
 'password' => 'dev1234567',


# tworzymy model w m1/models/vtSystem.php
<?php

namespace app\modules\m1\models;

use Yii;

class VtSystem extends \yii\db\ActiveRecord {

    public static function tableName() {
        return 'vt_system';
    }
}

# używamy modelu w kontrolerze: m1/views/DefaultController.php:
# znakami //! zaznaczono zmiany

<?php
namespace app\modules\m1\controllers;
use yii\web\Controller; //!
use app\modules\m1\models\VtSystem; //!

class DefaultController extends Controller {
    public function actionIndex()  {
        $model = new VtSystem(); //!
        return $this->render('index',
         [ 'model' => $model, ] //!
        );
    }
}


# sprawdzamy, czyjest w views/default/index.php:
<?php
var_dump($model);

# druk wszystkiego
# zob dokumentacje activerecord:
# http://www.yiiframework.com/doc-2.0/yii-db-baseactiverecord.html#findAll()-detail

foreach ($model->find()->all() as $rec) {
 var_dump($rec);
}

# formatowanie:
foreach ($model->find()->all() as $rec) {
 print $rec->system_id;
 print ': '.$rec->system;
 print '<br />';
}



#6. Używamy widgetów
####################
use yii\widgets\DetailView;
$rec=$model->findOne(1); //! wynik też jest modelem!
echo DetailView::widget([
    'model' => $rec,
    'attributes' => [
        'system_id',
        'system',
    ],
    ]);

# tabelka: http://www.yiiframework.com/doc-2.0/yii-grid-gridview.html
# - dodajemy nowa funkcję dokontrolera (grid używa providera, a nie modelu)
use yii\data\ActiveDataProvider;

...
  public function actionGrid() {
        $dataProvider = new ActiveDataProvider([
            'query' => VtSystem::find(),
        ]);
        return $this->render('grid', [
            'dataProvider' => $dataProvider,
        ]);
   }



# tworzymy widok grid.php:
<?php use yii\grid\GridView; ?>
<?= GridView::widget([
    'dataProvider' => $dataProvider,
    'columns' => [
        'system_id',
        'system',
    ],
]);

#7. Używamy szablonów twig
##########################
# http://www.fullybaked.co.uk/articles/using-twig-in-yii2
composer require yiisoft/yii2-twig

vi config/web.php
# do sekcji components/view dodajemy:
     'renderers' => [
            'twig' => [
                'class' => 'yii\twig\ViewRenderer',
                'cachePath' => false,_
                'options' => [
                    'auto_reload' => true,
                ],
                // add Yii helpers or widgets here
                'globals' => [
                    'html' => '\yii\helpers\Html',
                ]
            ]
     ],

# w kontrolerze tworzymy akcję Twig
# WAZNE! Twig wymaga tablicy asocjacyjnej, a nie obietu - toArray

  use yii\helpers\ArrayHelper;

  public function actionTwig()  { //!!
        $data = ArrayHelper::toArray(VtSystem::find()->all(), 'system_id', 'system');
        return $this->render('gindex.twig',
         [ 'data' => $data, ]
        );
  }


# widok gindex.twig

<div>
 <h1>Szablon Twig</h1>
<table border="1">
{% for sys in model %}
<tr>
    <td>{{ sys.system_id }}</td>
    <td>{{ sys.system }}</td>
</tr>
{% endfor %}
</table>
</div>


# przetwarzanie danych w szablonei:
# https://github.com/yiisoft/yii2-twig/blob/master/docs/guide/template-syntax.md
# widgety:
# https://github.com/yiisoft/yii2-twig/blob/master/docs/guide/layouts-and-widgets.md
Ostatnia modyfikacja: czwartek, 9 czerwiec 2016, 17:39