Instrukcje do ćwiczeń

0. Przygotowanie aplikacji

Zakładamy, że używamy xampp, framework yii (wersja 1.1) mamy zainstalowany w katalogu:

c:\xampp\htdocs\framework

Komendy wykonujemy w konsoli Windows (uruchomienie programem CMD).

Generujemy aplikację

cd c:\xampp\htdocs

c:\xampp\php\php.exe ../framework/yiic.php webapp testyii

1. Tworzymy Controller

Kontroler TestController:

<?php

class TestController extends Controller{

public function actionIndex()
{ print 'funkcja test - indeks'; }

}

próbujemy: http://localhost/testyii/test

albo: http://localhost/testyii/index.php?r=test

Powyższe dwa rodzaje adresowania są alternatywne, ale domyślny jest ten drugi.

Uwaga dodatkowa:

Aby uzyskać bardziej skrótowy (pierwszy) rodzaj adresowania musimy (http://www.yiiframework.com/doc/guide/1.1/pl/topics.url):

a) w katalogu aplikacji stworzyć plik .htaccess z zawartością:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php

b) W parametrach (protected/config/main.php) dopisać do sekcji UrlManager:

'showScriptName' => false,

2. Dodajemy do kontrolera odpowiednią akcję

public function actionPokaz()
{
print 'funkcja test/pokaz';
}

próbujemy:

http://localhost/testyii/test/pokaz

3. Tworzymy widok

Widok w pliku views/test/pokaz0.php:

<h1>JESTEM</h1>

zmieniamy w kontrolerze:

public function actionPokaz()
{ $this->render('pokaz0',array()); }

4. Wyświetlanie danych z bazy.

a. Stwórzmy tabelę test

CREATE TABLE IF NOT EXISTS `test` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`firstname` varchar(50) NOT NULL DEFAULT '',

`lastname` varchar(50) NOT NULL DEFAULT '',

`PESEL` varchar(11) NOT NULL DEFAULT '',

PRIMARY KEY (`id`)

) DEFAULT CHARSET=utf8;

INSERT INTO `test` (`id`, `lastname`, `firstname`, `PESEL`) VALUES

(1, 'Jan', 'Kowalski', '12345678901'),

(2, 'Józef', 'Nowak', '');

b. Widok z dostępem do bazy test/pokaz1.php:

<h1>JESTEM</h1>
<?php
$connection = Yii::app()->db;
$command=$connection->createCommand("select * from test");
$dane=$command->queryAll();
if (empty($dane)) {?>
brak danych
<?php
}else {
foreach($dane as $rekord) {
print_r($rekord);
print('<br />'.$rekord[id].'<hr /><br />');
}
}
?>

Wyświetlanie tabeli z użyciem znaczników table, tr, td: pokaz1a.php

c. W kontrolerze:

public function actionPokaz()
{ $this->render('pokaz1',array()); }

5. Tworzymy model

model Test.php na bazie CactiveRecord

<?php
class Test extends CactiveRecord {
public function tableName() {
return 'test';
}
}

W kontrolerze (zwróć uwagę na przekazywanie parametru – zmiennej $model):

public function actionPokaz() { 
$model=new Test();
$this->render('pokaz2',array('model'=>$model)); }
}

Widok pokaz2:

<h1>JESTEM (2)</h1>
<?php
foreach ($model->findAll() as $rekord) {
print($rekord['lastname']);
print('<br />'.$rekord['id'].'<hr /><br />'); 
}

6. Przekazywanie danych z kontrolera:

Widok pokaz3.php:

<h1>test3 - z przekazaniem danych</h1>
<?php
foreach ($dane as $rekord) {
print_r($rekord);
print('<br />'.$rekord['id'].'<hr /><br />'); 
}
?>

w kontrolerze:

public function actionPokaz() { 
$model=new Test();
$dane=$model->findAll();
$this->render('pokaz3',array('model'=>$model,'dane'=>$dane)); }
}

7. Pobranie w modelu:

Do modelu:

public function pobierz() {
return $this->findAll();
}
Do kontrolera:

public function actionPokaz() { 
$model=new Test();
$this->render('pokaz4',array('model'=>$model)); }
}

Widok Pokaz4:

<h1>test4 - z modelu - zdefiniowaną funkcją</h1>
<?php
foreach ($model->pobierz() as $rekord) {
print_r($rekord);
print('<br />'.$rekord['id'].'<hr /><br />'); 
}
?>

Ostatnia modyfikacja: wtorek, 20 październik 2015, 07:27