公式サイト
https://cakephp.org/jp
ドキュメント
https://book.cakephp.org/4/ja/index.html
PHP/MySQL/HTMLCSSJS
– 覚えておいた方が良い用語
MVC -> Model, View, Controller
CoC: Convention over Configuration
CakePHP 2.xをインストールしようと思ったが…
$ git clone -b 2.x git://github.com/cakephp/cakephp.git
Cloning into ‘cakephp’…
fatal: remote error:
composerで入れるか…
$ curl -sS https://getcomposer.org/installer | php
$ php composer.phar create-project –prefer-dist ‘cakephp/app:2.10.*’ myapp
Creating a “cakephp/app:2.10.*” project at “./myapp”
[InvalidArgumentException]
Could not find package cakephp/app with version 2.10.*.
composerでももはや無理なので、githubから無理やり取得します
https://github.com/cakephp/cakephp/tree/2.10.22
ここまででそこそこ時間がかかってしまった…orz
$ cd cakephp-2.10.22
appを使う
controller, model, view
書き込み権限
$ sudo chown -R vagrant app/tmp/
create table posts(
id int not null auto_increment primary key,
title varchar(50),
body text,
created datetime default null,
modified datetime default null
);
insert into posts (title, body, created, modified) values
(‘title 1’, ‘body 1’, now(), now()),
(‘title 2’, ‘body 2’, now(), now()),
(‘title 3’, ‘body 3’, now(), now());
Model/Post.php
class Post extends AppModel { }
Controller/PostsController.php
class PostsController extends AppController { public $helpers = array('Html', 'Form'); public function index(){ $params = array ( 'order' => 'modified desc', 'limit' => 2 ); $this->set('posts', $this->Post->find('all', $params)); $this->set('title', '記事一覧'); } }
/View/posts/index.ctp
<h2></h2> <ul> <?php foreach ($posts as $post) : ?> <li> <?php // debug($post); echo h($post['Post']['title']); ?> </li> <?php endforeach; ?> </ul>
config/core.php
Configure::write('debug', 0);
config/routes.php
Router::connect('/', array('controller' => 'posts', 'action' => 'index'));
View/Layouts/default.ctp
-> templateが書かれている
URL -> /${controller}/${method}/
postscontroller.php
public function view($id = null){ $this->Post->id = $id; $this->set('post', $this->Post->read()); }
/View/posts/view.ctp
<h2><?php echo h($post['Post']['title']); ?></h2> <p><?php echo h($post['Post']['body']); ?></p>
index.ctp
echo $this->Html->link($post['Post']['title'], '/posts/view/'.$post['Post']['id']); <h2>Add Post</h2> <?php echo $this->Html->link('Add post', array('controller'=>'posts', 'action'=>'add')); ?>
add.ctp
<h2>Add post</h2> <?php echo $this->Form->create('Post'); echo $this->Form->input('title'); echo $this->Form->input('body', array('rows'=>3)); echo $this->Form->end('Save Post'); ?>
エラーチェックはmodelにvalidationを書いていく
Mode/Post.php
class Post extends AppModel { public $validate = array( 'title' => array( 'rule' => 'notEmpty', ), 'body' => array( 'rule' => 'notEmpty', ) ); }
Posts/edit.ctp
<h2>Edit Post</h2> <?php echo $this->Form->create('Post'. array('action'=>'edit')); echo $this->Form->input('title'); echo $this->Form->input('body', array('rows'=>3)); echo $this->Form->end('Save!');
2系はかなり古いか…
Cake自体があまり人気ないかも…