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