å
責äºé
ãã®ã¬ãã¹ã³ã¯ãYii2ãçè§£ããã®ã«åœ¹ç«ã¡ãŸãã çŸæç¹ã§ã¯ãYii2ã¯æ¬çªã®æºåãã§ããŠããŸããã äœæ¥ãããžã§ã¯ãã§äœ¿çšããããšã¯ãå§ãããŸããã
å§ããŸããã
仿¥ãYiiãã¬ãŒã ã¯ãŒã¯ã®äœè
ã¯Yii2ã®å
¬éãã¬ãã¥ãŒãçºè¡šããŸããã Yii1ãšYii2ã®éã«ã¯éåžžã«å€ãã®å€æŽããããŸãã
ãã®ãã¥ãŒããªã¢ã«ã§ã¯ãYii2ã§ç°¡åãªããã°ãäœæããæ¹æ³ã«ã€ããŠèª¬æããŸãã ãã®ããã»ã¹ã§ã¯ãYii2ãããŠã³ããŒãããŠã€ã³ã¹ããŒã«ããåºæ¬çãªã¢ããªã±ãŒã·ã§ã³ãäœæããããŒã¿ããŒã¹ã«æ¥ç¶ããŠãæçš¿ã®äœæãæŽæ°ãèªã¿åããåé€ã®ããžãã¯ã説æããŸãã
ç¶è¡ããã«ã¯ã次ã®ãã®ãå¿
èŠã§ãã
- ApacheãNginxãªã©ã®WebãµãŒããŒã Nginxã䜿çšããŸãã Apacheã®äœ¿ç𿹿³ã¯ãããã«ç°ãªããããè¿ãã«NginxãæèŒãããµãŒããŒããªããŠãå¿é
ããå¿
èŠã¯ãããŸããã
- ã¢ããªã±ãŒã·ã§ã³çšã®NorthããŒã¿ããŒã¹ã MySQL 5.5ãéžæããŸãã
- PHPã®åºæ¬çãªç¥èã ãã¹ãŠãã§ããã ãç°¡åã«èª¬æããããšæããŸãããPHPã®ç¥èãããã°ããã»ã©ãå
ã«é²ãã®ãç°¡åã«ãªããŸãã
- YiiãŸãã¯MVCã®åºæ¬çãªç¥èã MVCã®çµéšããªãå Žåã¯ãMVCã®åºæ¬ãèªãããšããå§ãããŸãã MVCãç¥ããªããŠããã®ã¬ãã¹ã³ãèªãããšãã§ããŸãã ãäœãèµ·ããŠããããçè§£ããæ¹ãã¯ããã«ç°¡åã§ããMVCã®ãããã¯ã¯çè§£ããŠããŸãã
ã©ããïŒ
ãã§ã«WebãµãŒããŒãæ§æãããŠãããšä»®å®ããŸãã ã¬ãã¹ã³ã§ã¯ã次ã®ãã¹ãšã¢ãã¬ã¹ã䜿çšããŸãã
- / var / www / yii2ãšããŠDocumentRoot
- ãã¹ãã£ã³ã°ã¢ãã¬ã¹ãšããŠyii2.erianna.com
ãŸããã¬ãã¹ã³ã®æåŸã«ã
yii2.erianna.comã§äœæããã¢ããªã±ãŒã·ã§ã³ã®äŸãèŠãããšãã§ããŸãã
ããŠã³ããŒãYii2
ãªããžããªã®ã¯ããŒã³ãäœæããããã¢ãŒã«ã€ããããŠã³ããŒãããããšã«ãããGithubããYii2ã®ã³ããŒãååŸã§ããŸãã
git clone git@github.comïŒyiisoft / yii2.git / dir / to / yii2
ã©ã¡ãã
wget https://github.com/yiisoft/yii2/archive/master.zip
master.zip / dir / to / yii2ãè§£åããŸã
Yii2ãè§£åããåŸã
/ dir / to / yii2 / frameworkãã©ã«ããŒã«ç§»åããŸã
cd / dir / to / yii2 / framework
次ã®ã³ãã³ããå®è¡ããŠãæåã®è³ªåã«ãã¯ãããšçããããšã«ãããåºæ¬çãªWebã¢ããªã±ãŒã·ã§ã³ãäœæããŸãã
php yiic.php app / create / var / www / yii2
ã¯ã
ããã¯ãYii 1.xã®Webã¢ããªã±ãŒã·ã§ã³äœæããŒã ã«çžåœããŸãã æ¬¡ã«/ var / www / yii2ã«ç§»åããŸãã 1ã€ã®ãã©ã«ããŒãš1ã€ã®ãã¡ã€ã«ã衚瀺ãããŸãã
$ ls -l
åèš8
-rwxrwxrwx 1ãŠãŒã¶ãŒwww-data 265 5æ4æ¥09:30 index.php
drwxrwsr-x 5ãŠãŒã¶ãŒwww-data 4096 5æ4æ¥09:07ä¿è·
ãµã€ããéå§ããåã«ãindex.phpãã¡ã€ã«ã«ããã€ãã®å€æŽãå ããå¿
èŠããããŸãã ç§ã®æèŠã§ã¯ãããã€ãã®ç©è°ãéžã決å®ããããŸãã Yii2ã®æçµãªãªãŒã¹ã®åã«ä¿®æ£ãããããã€ã³ã¹ããŒã«ãããããªãããšãé¡ã£ãŠããŸãã
index.phpãæ¬¡ã®ããã«å€æŽããŸãã
<?php define('YII_DEBUG', true);
倿Žç¹ãèŠãŠã¿ãŸãããã
æåã«ãframework / yii.phpãã¡ã€ã«ãžã®ãã¹ã倿Žããå¿
èŠããããŸãã ããã©ã«ãã§ã¯ãåããã£ã¬ã¯ããªã«ãããšèŠãªãããŸãã ãããããããŸããããYii2ãžã®æ£ç¢ºãªãã¹ãæå®ããå¿
èŠããããŸãã
$config = require dirname(__FILE__).'/protected/config/main.php'; $config['basePath'] = dirname(__FILE__).'/protected';
次ã«ã
__ DIR__ã®ä»£ããã«
__FILE__ã䜿çšããããã«æ§æãã¡ã€ã«ãžã®ãã¹ãæŽæ°ããŸãã ããã¯ãã¢ããªã±ãŒã·ã§ã³ãéå§ã§ããããã«ããããã«å¿
èŠã§ãã
ç¶è¡ããåã«ãYii-
Namespacesã®æ°ããç¹ã«æ³šæããããšãéèŠã§ã
$app = new \yii\web\Application($config);
åå空éã®æå³ã¯ãç°ãªãã³ãŒãããŒã¹éã®è¡çªãé¿ããããã«ãã³ãŒããè«çãŠãããã«ã«ãã»ã«åããããšã§ãã 2ã€ã®ã¯ã©ã¹ããããäž¡æ¹ãšã
FooãšåŒã°ããäž¡æ¹ã«
Barã¡ãœããããããšããŸãã ããããç°ãªãåå空éã«ããå Žåãè¡çªããããšãªãäºãã«ç¬ç«ããŠåŒã³åºãããšãã§ããŸãã
$foo = new \namespace\Foo; $foo2 = new \namespace2\Foo;
åå空éã¯ãã³ãŒãã®è¡çªãé¿ããç°¡åãªæ¹æ³ã§ãã Yii2ã¯ãã®ååã«åºã¥ããŠå®å
šã«æ§ç¯ãããããã
ãããã«ã€ããŠèªãããšããå§ãããŸãã
ããã§æåã®ã¢ããªã±ãŒã·ã§ã³ãäœæãããŸããïŒ yii2ã®ããã¢ãã¬ã¹ã«ç§»åãããšã次ã®ããŒãžã衚瀺ãããŸãã

åããŠã®Yii2ã¢ããªïŒ
Yii 1.xãšã¯ç°ãªããåºæ¬çãªYii2ã¢ããªã±ãŒã·ã§ã³ã¯ããã»ã©ãšããµã€ãã£ã³ã°ã§ã¯ãããŸããã 圌ã«ããå°ãããããšãæããŸãããã
ãŸãããã¡ã€ã«
/protected/views/layout/main.phpãéãããã®å
容ã眮ãæããŸãã
<?php use yii\helpers\Html as Html; ?> <!doctype html> <html lang="<?php \Yii::$app->language?>"> <head> <meta charset="utf-8" /> <title><?php echo Html::encode(\Yii::$app->name); ?></title> <link href="//netdna.bootstrapcdn.com/twitter-bootstrap/2.3.1/css/bootstrap-combined.min.css" rel="stylesheet"> <script src="//netdna.bootstrapcdn.com/twitter-bootstrap/2.3.1/js/bootstrap.min.js"></script> </head> <body> <div class="container"> <div class="navbar navbar-inverse"> <div class="container"> <div class="navbar-inner"> <a class="brand" href="/"><?php echo Html::encode(\Yii::$app->name); ?></a> </div> </div> </div> <div class="content"> <?php echo $content?> </div> </div> </body> </html>
ããŒãžãæŽæ°ããŸãã ã»ã Twitter Bootstrapã§æ¹åãããŠããŸãããïŒ ç¹°ãè¿ããŸãããYii1ãšYii2ã®éã§å€§ããªéãã¯ãããŸããã ãã¥ãŒã«ã³ã³ãã³ãã衚瀺ããããã®$ content倿°ããŸã ãããŸãã ãã ãã
Yii :: appïŒïŒã¯ Yii :: $ app ã«çœ®ãæããããŸããã Yii2ã®ãã¹ãŠã¯åå空éã§åããããŠããããããçã®ãã¯ã©ã¹ãåŒã³åºãã ãã§ãªããåå空éã§ãã¹ãŠãåç
§ããããšãå¿ããªãã§ãã ããã
ããã§ã¯ãå®éã®ã³ãŒãã£ã³ã°ã«åãæãããŸãããïŒ
ããŒã¿ããŒã¹ã«æ¥ç¶ãã
ãã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯ãããã°ã®æçš¿ãä¿åããåçŽãª
PostsããŒãã«ã®ã¿ããããŸãã
ããŒã¿ããŒã¹ã«ããŒãã«ãäœæãã
MySQLã«ãã°ã€ã³ããyii2ãšããååã®ãŠãŒã¶ãŒãšããŒã¿ããŒã¹ãäœæããŸãã æ¬¡ã«ã次ã®ã¯ãšãªãå®è¡ããŠæ§é ãæŽæ°ããŸãã
DROP TABLE IF EXISTS `posts`; CREATE TABLE IF NOT EXISTS `posts` ( `id` int(11) NOT NULL, `title` varchar(255) NOT NULL, `content` text NOT NULL, `created` datetime NOT NULL, `updated` datetime NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; ALTER TABLE `posts` ADD PRIMARY KEY(`id`); INSERT INTO `yii2`.`posts` (`id`, `title`, `content`, `created`, `updated`) VALUES ('1', 'Example Title', 'New Post', NOW(), NOW());
èšå®ãæŽæ°
/ var / www / yii2 / protected /ãã©ã«ããŒã«ç§»åãããæ°ã«å
¥ãã®ãšãã£ã¿ãŒã§
config.phpãã¡ã€ã«ãéããŸãã ãã¹ãŠã®å
容ãããã§çœ®ãæããŸãïŒ
<?php return array( 'id' => 'webapp', 'name' => 'My Web Application', 'components' => array(
Yiiã«ç²ŸéããŠããå ŽåãYii1ãçæãããããã®å·šå€§ãªèšå®ã«æ¯ã¹ãŠå€§å¹
ãªæ¹åãèŠãããŸãã æ§é ã¯åããŸãŸã§ãããããŒã¿ããŒã¹ã«æ¥ç¶ããããã«å¿
èŠãªããšã¯ããã ãã§ãã
æçš¿ã¢ãã«ãäœæãã
ä¿è·ããããã©ã«ããŒã«æ°ãã
ã¢ãã«ãã©ã«ããŒãäœæããæ¬¡ã®ã³ãŒãã䜿çšããŠãã®äžã«
Post.phpãã¡ã€ã«ãäœæããŸãã
<?php namespace app\models; class Post extends \yii\db\ActiveRecord { public static function model($className=__CLASS__) { return parent::model($className); } public static function tableName() { return 'posts'; } public static function primaryKey() { return array('id'); } public function attributeLabels() { return array( 'id' => 'ID', 'title' => 'Title', 'content' => 'Content', 'created' => 'Created', 'updated' => 'Updated', ); } }
Yii1ã«ç²ŸéããŠããå ŽåãActiveRecordã§ïŒå°ãªããšããã®äŸã§ã¯ïŒå€æŽãããŠããå¯äžã®ããšã¯ã
primaryKeyããã³
tableName颿°ãéçã¡ãœããã«ãªã£ãããšã§ãã ä»ã®ãã¹ãŠã¯åºæ¬çã«åããŸãŸã§ãã ã»ãšãã©ã®å ŽåãActiveRecordã¯å€æŽãããŠããŸããã
ã¯ã©ã¹ã®æãéèŠãªéšåã¯ã
app \ modelsåå空éãå«ããããšã§ãã ããã¯Yiiã«ãã®ãã¡ã€ã«ãã©ã®ããã«åç
§ã§ããããäŒããŸãã
ã¯ã©ã¹åãåçŽã«åŒã³åºãããšãã§ããYii1ãšã¯ç°ãªããYii2ã¯ç°ãªãã¿ã€ãã®ãã¡ã€ã«ã¹ã¿ãŒãã¢ããã䜿çšããããã䜿çšãããã®ãæ£ç¢ºã«æå®ããå¿
èŠããããŸãã ããã«ãããéçºãå€å°é
ããªãå ŽåããããŸãïŒCHtmlãåŒã³åºãã ãã§ãªããåžžã«\ yii \ framework \ web \ Htmlãå«ããããšãå¿ããªãããã«ããã®ã¯é¢åã§ãïŒãããã€ãã®ã¯ã©ã¹ã å°ãªããšãçè«çã«ã¯ã
ã¯ã©ããïŒ
Postã¢ãã«ãåå空éã«é
眮ããããCRUDã¢ããªã±ãŒã·ã§ã³ã®äœæãéå§ã§ããŸãã
ãã¹ãŠèŠã
éå§ããã«ã¯ããã¹ãŠã衚瀺ã§ããããã«ã€ã³ããã¯ã¹ã¢ã¯ã·ã§ã³ãæŽæ°ããŸãããã ã¡ã€ã³ããŒãžã«ãã¹ãŠã®ã¡ãã»ãŒãžã衚瀺ãããã®ã倧奜ããªã®ã§ãããããå§ããŸãããã
controllers / SiteController.phpãã¡ã€ã«ãéãã以äžã«ç€ºãããã«ã€ã³ããã¯ã¹ã¢ã¯ã·ã§ã³ãæŽæ°ããŸãã
public function actionIndex() { $post = new Post; $data = $post->find()->all(); echo $this->render('index', array( 'data' => $data )); }
ããã€ã泚æç¹ããããŸãã ãŸãã
::ã¢ãã«ïŒïŒ->æ¶ããŸããã ActiveRecordã®ããŒã¿ãšã¢ãã«ã¯ãçŽæ¥ã¡ãœããåŒã³åºãã§å©çšã§ããããã«ãªããŸããã ããšãã°ã$ post-> findïŒïŒ-> allïŒïŒã ç§ã¯å人çã«Post :: modelïŒïŒ-> findAllïŒïŒã倧奜ãã§ãããšããäºå®ã«ãããããããããŒã¿ã«ã¢ã¯ã»ã¹ããæ°ããæ¹æ³ã¯ããæšæºçã§èªã¿ãããããã«èŠããŸãã
次ã«ãfindAllã¯findïŒïŒ-> allïŒïŒã«çœ®ãæããããŸããã ãã¹ãŠã®æ€çŽ¢ã¡ãœããã¯ãfindïŒïŒãŸãã¯findBySqlïŒïŒããååŸãããŸãã
第äžã«ã$ this-> renderïŒïŒã¯è¡ã®å
é ã§ãšã³ãŒãèŠæ±ããããã«ãªããŸããã å人çã«ãç§ã¯ãããå«ãã§ãã ããã¯CakePHP
ã«éåžžã«äŒŒãŠãããç§ã®æèŠã§ã¯åé·ã§ãã ãã®å€æŽã®èåŸã«ããèãæ¹ã¯ããŠãŒã¶ãŒã«è¡šç€ºããããã¹ãŠã®ãã®ããšã³ãŒçµç±ã§éä¿¡ããå¿
èŠããããšããããšã§ããããã§ãªããã°ããããªãã¢ã¯ã·ã§ã³ã®ããã«å€æ°ã«é
眮ããã ãã§ãã 倿°ã«ã¬ã³ããªã³ã°ããå€ãæ¹æ³ïŒãã©ã¡ãŒã¿ãŒãã¬ã³ããªã³ã°ã¡ãœããã«æž¡ãïŒã奜ã¿ãŸãããããããããã«æ
£ããã§ãããã
次ã«ãããŒãžãæŽæ°ããŸã...
åå空éã«ç²ŸéããŠãããªããããããPostã¢ãã«ãå«ããªãã£ãçç±ãå°ããã§ãããã æ
£ããŠããªãå Žåã¯ããšã©ãŒãåãåã£ãããšã«é©ããããããŸããã ãã®çç±ã¯ç°¡åã§ãã _Yii2ã®åå空éãèŠããŠããå¿
èŠããããŸã_ã 䜿çšããããã®ã¯ãã¹ãŠãããã以åã«è¡ãããŠããªãå Žåãæç¢ºã«ç€ºãããå¿
èŠããããŸãã
SiteControllerãã¡ã€ã«ã®å
é ã«æ¬¡ã®è¡ã远å ããŸãã æ¬¡ã«ãããŒãžãæŽæ°ããŸãã
use app\models\Post;
次ã«ãããŒã¯ã¢ããã远å ããŠæçš¿ã衚瀺ããŸãã
ä¿è·ããããã¡ã€ã«
/ views / site / index.phpãéãããã®å
å®¹ãæ¬¡ã®ãã®ã«çœ®ãæããŸãã
<?php use yii\helpers\Html; ?> <?php echo Html::a('Create New Post', array('site/create'), array('class' => 'btn btn-primary pull-right')); ?> <div class="clearfix"></div> <hr /> <table class="table table-striped table-hover"> <tr> <td>#</td> <td>Title</td> <td>Created</td> <td>Updated</td> <td>Options</td> </tr> <?php foreach ($data as $post): ?> <tr> <td> <?php echo Html::a($post->id, array('site/read', 'id'=>$post->id)); ?> </td> <td><?php echo Html::a($post->title, array('site/read', 'id'=>$post->id)); ?></td> <td><?php echo $post->created; ?></td> <td><?php echo $post->updated; ?></td> <td> <?php echo Html::a(NULL, array('site/update', 'id'=>$post->id), array('class'=>'icon icon-edit')); ?> <?php echo Html::a(NULL, array('site/delete', 'id'=>$post->id), array('class'=>'icon icon-trash')); ?> </td> </tr> <?php endforeach; ?> </table>
ããŒããèŠãç®ãéãããïŒ CHtml :: linkïŒïŒã¯ãªããªãã代ããã«Htmlãã«ããŒã衚瀺ãããŸãã 幞ããªããšã«ãCHtml :: linkãšHtml :: aã®æ§é ã¯å€ãããŸããã ãããã£ãŠããã©ã¡ãŒã¿ãå
¥åããã ãã§ãã
èªã
èªãã®ã¯ç°¡åãªã®ã§ãçè§£ããŸãããã æ¬¡ã®å®çŸ©ã§SiteControllerã«æ°ããã¡ãœãããäœæããŸãã
public function actionRead($id=NULL) { echo 'HelloWorld'; }
次ã«é²ã¿ãŸããïŒR =ãµã€ã/èªã¿åãïŒID = 1ã ç»é¢ã«
HelloWorldã衚瀺ãããŸãã ã»ã ããã ããã¯ãã¡ãœãããåŒã³åºãããããšãæå³ããŸãã ãããæŽæ°ããŠãããŒã¿ããŒã¹ã®ããŒã¿ã衚瀺ããŸãã
ãŸããæçš¿ãèŠã€ãããªãå Žåã«HttpExceptionãã¹ããŒã§ããããã«ãSiteControllerã«HttpExceptionã远å ããŸãããã
use \yii\base\HttpException;
èªã¿åãã¢ã¯ã·ã§ã³ãè£å®ãã
public function actionRead($id=NULL) { if ($id === NULL) throw new HttpException(404, 'Not Found'); $post = Post::find($id); if ($post === NULL) throw new HttpException(404, 'Document Does Not Exist'); echo $this->render('read', array( 'post' => $post )); }
æç¢ºã«ããããã«ãHttpExceptionã¯åºæ¬çã«CHttpExceptionã§ãã ããŒã¿ããŒã¹ã§æå®ãããIDã®æçš¿ããªã¯ãšã¹ãããŠè¡šç€ºããã ãã§ãã æçš¿ãèŠã€ãããªãã£ãå ŽåããŸãã¯IDãæå®ãããªãã£ãå ŽåãHttpExceptionãã¹ããŒããŸãã
次ã«ã
ä¿è·ãããæ°ãããã¡ã€ã«
/ views / site / read.phpãäœæããæ¬¡ã®ã³ãŒãã远å ããŠæçš¿ã衚瀺ããå¿
èŠããããŸãã
<?php use yii\helpers\Html; ?> <div class="pull-right btn-group"> <?php echo Html::a('Update', array('site/update', 'id' => $post->id), array('class' => 'btn btn-primary')); ?> <?php echo Html::a('Delete', array('site/delete', 'id' => $post->id), array('class' => 'btn btn-danger')); ?> </div> <h1><?php echo $post->title; ?></h1> <p><?php echo $post->content; ?></p> <hr /> <time>Created On: <?php echo $post->created; ?></time><br /> <time>Updated On: <?php echo $post->updated; ?></time>
次ã«ãã¡ã€ã³ããŒãžã§[æçš¿ã®äŸ]ãã¯ãªãã¯ããŸãã åºæ¥äžããïŒ ããã°ã®æçš¿ã衚瀺ã§ããããã«ãªããŸããïŒ
åé€ãã
æçš¿ã®åé€ãåæ§ã«ç°¡åãªã®ã§ãç§ãã¡ããããã®äžè©±ãããŸãã æ¬¡ã®ã³ãŒãã䜿çšããŠæ°ããã¡ãœãããäœæããŸãã
public function actionDelete($id=NULL) { }
ãã®æ¹æ³ã§ã¯ãããå°ãè€éãªæ§æãå¿
èŠã§ãã æçš¿ãæ£åžžã«åé€ããåŸããŠãŒã¶ãŒãã¡ã€ã³ããŒãžã«ãªãã€ã¬ã¯ãããå¿
èŠããããŸãã å§ããŸãããã
ãŸããæ¹æ³ã説æããŸã
public function actionDelete($id=NULL) { if ($id === NULL) { Yii::$app->session->setFlash('PostDeletedError'); Yii::$app->getResponse()->redirect(array('site/index')); } $post = Post::find($id); if ($post === NULL) { Yii::$app->session->setFlash('PostDeletedError'); Yii::$app->getResponse()->redirect(array('site/index')); } $post->delete(); Yii::$app->session->setFlash('PostDeleted'); Yii::$app->getResponse()->redirect(array('site/index')); }
Yii2ã«é¢ããããã€ãã®ã³ã¡ã³ãã æåã«ããªãã€ã¬ã¯ãã¯
$ this-> redirectïŒïŒã®ä»£ããã«
Yii :: $ app-> getResponse-> redirectïŒïŒã䜿çšããŠè¡ãããŸãã ãã®ãœãªã¥ãŒã·ã§ã³ã¯ãã³ãŒããæŽçãããšããæå³ã§ã¯çã«ããªã£ãŠããŸãããå°å·ã«æéãããããŸãïŒ ãŸããããã«ããã$ã¢ããªã«æ··éæãçããŸãã åæã«ãã¡ãœããã®å®çŸ©ã¯åããŸãŸã§ãã
第äºã«ãsetFlashã¯appïŒïŒã®ä»£ããã«$ appã§å©çšã§ããããã«ãªããŸããã ããã§æ
£ããã¯ãã§ãã =ïŒ
ããã§åé€ã¯å®äºã§ãã
protected / views / site / index.phpã«æ»ããéä¿¡ãããéç¥ããã£ããããŸãããã
æåã®hrã¿ã°ã®åŸã«ããã远å ããŠãã ãã
<?php if(Yii::$app->session->hasFlash('PostDeletedError')): ?> <div class="alert alert-error"> There was an error deleting your post! </div> <?php endif; ?> <?php if(Yii::$app->session->hasFlash('PostDeleted')): ?> <div class="alert alert-success"> Your post has successfully been deleted! </div> <?php endif; ?>
ããµã³ãã«æçš¿ããåé€ããŠã¿ãŠãã ããã ãšãŠãç°¡åã§ããã ããã§Yii :: $ appã®ã¢ã€ãã¢ãçè§£ã§ããŸãããïŒ
äœæãã
ããã§ã¯ã楜ãããããŒããã£ã¹ãã«ç§»ããããã°ã«æ°ãããšã³ããªãäœæããŸãããã äœæããã«ã¯ããã€ãã®ããšãè¡ãå¿
èŠããããŸãã æåã«ãActiveFormã䜿çšããŠãã©ãŒã ãæäœããŸãã æ¬¡ã«ã$ _POSTã®ããŒã¿ããã£ããããŠæ€èšŒããå¿
èŠããããŸãã ãããŠæåŸã«ãããŒã¿ãããŒã¿ããŒã¹ã«ä¿åããå¿
èŠããããŸãã å§ããŸãããã
ãŸãããã©ãŒã ã®ãã¥ãŒãäœæããŸãããã ãã¡ã€ã«
protected / views / site / create.phpãäœæããŸãã ãŠã£ãžã§ããã䜿çšãããããã¢ããªã±ãŒã·ã§ã³ã®ã«ãŒãã«ãassetsããã©ã«ããŒãäœæããWebãµãŒããŒã§æžã蟌ã¿å¯èœã«ããå¿
èŠããããŸãã Chmod 755ã¯éåžžããã®åé¡ã解決ããŸãã æ¬¡ã«ãã¡ãœããå®çŸ©ãSiteControllerã«è¿œå ããŸãã
public function actionCreate() { $model = new Post; if (isset($_POST['Post'])) { $model->title = $_POST['Post']['title']; $model->content = $_POST['Post']['content']; if ($model->save()) Yii::$app->response->redirect(array('site/read', 'id' => $model->id)); } echo $this->render('create', array( 'model' => $model )); }
Yii1ãšã»ãŒåãããã«èŠããŸãã ãããããŸã ããã€ãã®éãããããŸãã ãŸããControllerã«ã¯ãpopulateãã¡ãœããïŒ$ this-> populateïŒ$ dsã$ modelïŒïŒããããçè«çã«ã¯ãã¹ãŠã®ãã®äžæ³å æ è
ãissetïŒ$ _ POSTïŒã§ç¯çŽã§ããã¯ãã§ãã æ°ããæçš¿ãäœæããããã®ã³ãŒãã¯æ¬¡ã®ããã«ãªããŸãã
if ($this->populate($_POST, $model)) {
æ®å¿µãªãããææ°ããŒãžã§ã³ã§åäœãããããšãã§ããŸããã§ããã ç§ã®ã¢ãã«ã®ããŒã¿ã¯å€æŽãããŠããŸããã æ¬¡ã«ã$ model-> attributes = $ _POST ['Post']ãæ©èœããŸããã§ããã ActiveRecordã¯å°ã湿ã£ãŠããããã«èŠããã®ã§ãä»ã®ãšããã¯æã§ããŒã¿ãå
¥åããå¿
èŠããããŸãã
æåŸã«ãå¥ã®é害ã«ééããŸãã-äžæã®IDã§ããŒã¿ããŒã¹ã«ä¿åããŸãã ãããã£ãŠããããæåã§è¡ãå¿
èŠããããŸãã 誰ããããã解決ããæ¹æ³ãèŠã€ããã-ã³ã¡ã³ããæ®ããŠãã ããã
Postã¢ãã«ãæŽæ°ããŠãäžæã®äž»ããŒãæ©èœããããã«ããŸãã ãã¡ã€ã«ã®æåŸã«æ¬¡ã®ã³ãŒãã远å ããŠãã ããïŒ
public function beforeSave($insert) { if ($this->isNewRecord) { $command = static::getDb()->createCommand("select max(id) as id from posts")->queryAll(); $this->id = $command[0]['id'] + 1; } return parent::beforeSave($insert); }
圌ãè¡ãããšã¯ãæ°ããã¬ã³ãŒããäœæãããŠãããã©ããã確èªããããšã ãã§ããäœæãããŠããå Žåã¯ãããŒã¿ããŒã¹ããæå€§IDãååŸãããããã€ã³ã¯ãªã¡ã³ãããŠIDãšããŠäœ¿çšããŸãã
ããã€ãã®ç°ãªãçµã¿åããã詊ããŸããïŒNULLã0ã_ $ model-> idã§ãããäœããã®çç±ã§ActiveRecordã¯åªãã0ã®IDã§ã¢ãã«ãä¿æããããšãæåŠããŸããããããæ©èœããªãçç±ã¯ããããŸããïŒã
ïŒ
å®éãèè
ã¯åã«idãã£ãŒã«ãã«AUTO_INCREMENTãæå®ããã®ãå¿ããŠããŸãããããããç§ã¯ãã®éšåãäžæ³šæã®å°ãã®ã¬ãã¹ã³ãšããŠæ®ãããšã«ããŸãããç§ãã¡ã¯ãããçè§£ããä»åºŠã¯ãã¥ãŒãäœæããŸãã
<?php use yii\helpers\Html; ?> <?php $form = $this->beginWidget('yii\widgets\ActiveForm', array( 'options' => array('class' => 'form-horizontal'), )); ?> <?php echo $form->field($model, 'title')->textInput(array('class' => 'span8')); ?> <?php echo $form->field($model, 'content')->textArea(array('class' => 'span8')); ?> <div class="form-actions"> <?php echo Html::submitButton('Submit', null, null, array('class' => 'btn btn-primary')); ?> </div> <?php $this->endWidget(); ?>
以äžã§ãã¢ãã«ãä¿åã§ããŸãã ããããäœããããããã§ããã ããšãã°ãäœæããã³æŽæ°æéã0ã§ããçç±ã¯äœã§ããïŒ ç©ºã®ãã©ãŒã ãéä¿¡ãããšã©ããªããŸããïŒ
ç¶è¡ããåã«ãããã2ã€ã®ãšã©ãŒãä¿®æ£ããŸãããã Postã¢ãã«ãéããæ¬¡ã®ã¡ãœããã远å ããŸãã
public function rules() { return array( array('title, content', 'required'), ); }
ãã®ã¡ãœããã¯ãã¿ã€ãã«ãšã³ã³ãã³ããã£ãŒã«ããå¿
é ã«ããŸãã ã¢ãã«ãä¿åããããšãããšããããã®ãã£ãŒã«ãã®ããããã空ã®å Žåããšã©ãŒãçºçããŸãã ãŸããããŒãã¹ãã©ããã䜿çšããŠããããããšã©ãŒã
æ£ç¢ºã«äœã§ããããç°¡åã«ç¢ºèªã§ããŸãã 詊ããŠã¿ãŠãã ããïŒ
次ã«ãæ£ããæéãèªåçã«èšå®ããå¿
èŠããããŸãã
ãŸããã¢ãã«ã®äžéšã«å¥ã®
䜿çšã©ã€ã³ã远å ã
ãŸã ã
use \yii\db\Expression;
次ã«ãbeforeSaveã¡ãœãããæŽæ°ããŠããã»ã¹ãèªååããŸãã
ifãããã¯ïŒ$ this-> isNewRecordïŒå
ã«æ¬¡ã®è¡ã远å ããŸãã
$this->created = new Expression('NOW()');
芪ãè¿ãåã«:: beforeSaveïŒ$ insertïŒè¿œå ïŒ
$this->updated = new Expression('NOW()');
ãã®çµæãã¡ãœããã¯æ¬¡ã®ããã«ãªããŸãã
public function beforeSave($insert) { if ($this->isNewRecord) { $this->created = new Expression('NOW()'); $command = static::getDb()->createCommand("select max(id) as id from posts")->queryAll(); $this->id = $command[0]['id'] + 1; } $this->updated = new Expression('NOW()'); return parent::beforeSave($insert); }
ããäžåºŠä¿åããŠã¿ãŸãããã ããã§ãã¢ãã«ã¯ã¿ã€ãã«ãã£ãŒã«ããšã³ã³ãã³ããã£ãŒã«ããæ€èšŒããäœææéãšæŽæ°æéãèªåçã«å
¥åããŸãã æŽæ°ã«ç§»ããŸãããã
æŽæ°ãã
æŽæ°ã¢ã¯ã·ã§ã³ã¯äœæãšã»ãŒåãã§ãã å¯äžã®éãã¯ã䜿çšããã¢ãã«ã®å®çŸ©æ¹æ³ã§ãã
äœæã¢ã¯ã·ã§ã³ã§ã¯ã次ã®ããšãè¡ããŸããã
$model = new Post;
æŽæ°ã¢ã¯ã·ã§ã³ã§ã¯ããããå®è¡ããŸãããã
$model = Post::find($id);
äœããèŠã€ãããªããšãã«äŸå€ãã¹ããŒããã®ã奜ããªã®ã§ãç§ã®ã¢ã¯ã·ã§ã³ã¯ãšã©ãŒãã§ãã¯ãè¡ããŸãã ãããã远å ãããšãã³ãŒãã¯æ¬¡ã®ããã«ãªããŸãã
public function actionUpdate($id=NULL) { if ($id === NULL) throw new HttpException(404, 'Not Found'); $model = Post::find($id); if ($model === NULL) throw new HttpException(404, 'Document Does Not Exist'); if (isset($_POST['Post'])) { $model->title = $_POST['Post']['title']; $model->content = $_POST['Post']['content']; if ($model->save()) Yii::$app->response->redirect(array('site/read', 'id' => $model->id)); } echo $this->render('create', array( 'model' => $model )); }
äœãé¢çœãããšã«æ°ã¥ããŸãããïŒ ãã¥ãŒã¯
ãŸã£ããåãã§ããããããã¥ãŒã䜿çšããŠäœæããŸãã ãã£ãããïŒ
çµè«
ã ããããã£ãã æ°æéã§ãYii2ã®å®å
šãªç¡ç¥ããåçŽãªCRUDã¢ããªã±ãŒã·ã§ã³ã«ç§»è¡ããŸããã ãã®ç¥èã䜿çšããŠããŠãŒã¶ãŒãµããŒããèªèšŒãããŒã¿ããŒã¹å
ã®è¿œå ããŒãã«ãããã«åŒ·åãªæ©èœã远å ããããšã«ãããã¢ããªã±ãŒã·ã§ã³ãç°¡åã«æ¡åŒµã§ããŸãã
Yii2ã¯Yii 1.x
ã«éåžžã«äŒŒãŠããŸãããäœ¿çšæ¹æ³ãåŠã¶å¿
èŠãããå€ãã®å€æŽããããŸãã Yii2ã¯ãŸã ååã«ææžåãããŠããªããããGithubã®ãœãŒã¹ã³ãŒãã«åºã¥ããŠãã®èšäºãæžããã ãã§ãã ãã¬ãŒã ã¯ãŒã¯ã®ã³ãŒãã¯éåžžã«ããææžåãããŠããŸãã ãŸããã¡ãœããã¯Yii1ã«éåžžã«äŒŒãŠãããããå¿
èŠãªãã®ãç°¡åã«èŠã€ããããšãã§ããŸããã
çºèŠããããã«ãä¿®æ£ãå¿
èŠãªåé¡ãããã€ããããŸãïŒActiveRecordã®ããã¥ã¡ã³ããæ¹åããããåé¡ãä¿®æ£ããããšã«ããïŒã
åç
§è³æ
GithubãœãŒã¹ã³ãŒããã¢ãœãŒã¹èšäº