1.Apache ,MySQl start
2.Table
3.Entity
4.Controller
5.View Template
1.Apache ,MySQl start
Database name:mydata
table name: people messages
people
Column | Type | Length | Index | A_I | NULL |
id | INT | PRIMARY | ON | ||
name | VARCHAR | 100 | |||
VARCHAR | 200 | ON | |||
age | INT |
messages
Column | Type | Length | Index | A_I |
id | INT | PRIMARY | ON | |
person_id | INT | |||
message | VARCHAR | 65535 | 65535 | |
created_at | DATATIME |
2.Table
①MessagesTable.php
C:\xampp\htdocs\mycakeapp\src\Model\Table
<?php
namespace App\Model\Table;
use Cake\ORM\Query;
use Cake\ORM\RulesChecker;
use Cake\ORM\Table;
use Cake\Validation\Validator;
class MessagesTable extends Table {
public function initialize(array $config) {
parent::initialize($config);
$this->setDisplayField('message');
$this->belongsTo('People');
}
public function validationDefault(Validator $validator) {
$validator
->allowEmpty('id', 'create');
$validator
->integer('person_id', 'person idは整数で入力下さい。')
->notEmpty('person_id', 'person idは必ず記入下さい。');
$validator
->scalar('message', 'テキストを入力下さい。')
->requirePresence('message', 'create')
->notEmpty('message', 'メッセージは必ず記入して下さい。');
return $validator;
}
}
?>
②PeopleTable.php
C:\xampp\htdocs\mycakeapp\src\Model\Table
<?php
namespace App\Model\Table;
use Cake\ORM\Query;
use Cake\ORM\RulesChecker;
use Cake\ORM\Table;
use Cake\Validation\Validator;
class PeopleTable extends Table {
public function initialize(array $config){
parent::initialize($config);
$this->setDisplayField('name');
$this->hasMany('Message');
}
public function findMe(Query $query, array $options){
$me = $options['me'];
return $query->where(['name like' => '%' . $me . '%'])
->orWhere(['mail like' => '%' . $me . '%'])
->order(['age'=>'asc']);
}
public function findByAge(Query $query, array $options){
return $query->order(['age'=>'asc'])->order(['name'=>'asc']);
}
public function validationDefault(Validator $validator){
$validator
->integer('id','idは整数で入力下さい。')
->allowEmpty('id','create');
$validator
->scalar('name','テキストを入力下さい。')
->requirePresence('name','create')
->notEmpty('name','名前は必ず記入して下さい。');
$validator
->scalar('mail','テキストを入力下さい。')
->allowEmpty('mail')
->email('mail',false,'メールアドレスを記入して下さい。');
$validator
->integer('age','整数を入力下さい。')
->requirePresence('age', 'create')
->notEmpty('age','必ず値を入力下さい。')
->greaterThan('age',-1,'ゼロ以上の値を記入下さい。');
return $validator;
}
}
?>
3.Entity
Message.php
C:\xampp\htdocs\mycakeapp\src\Model\Entity
<?php
namespace App\Model\Entity;
use Cake\ORM\Entity;
class Message extends Entity {
protected $_accessible = [
'person_id' => true,
'message' => true
];
}
?>
4.Controller
MessagesController.php
C:\xampp\htdocs\mycakeapp\src\Controller
<?php
namespace App\Controller;
use App\Controller\AppController;
use Cake\I18n\Time;
class MessagesController extends AppController {
public function index() {
if ($this->request->is('post')){
$data = $this->request->data['Messages'];
$entity = $this->Messages->newEntity($data);
$entity->created_at = new Time(date('Y-m-d H:i:s'));
$this->Messages->save($entity);
} else {
$entity = $this->Messages->newEntity();
}
$data = $this->Messages->find('all')
->contain(['People'])
->order(['created_at'=>'desc']);
$this->set('data', $data);
$this->set('entity', $entity);
}
}
?>
5.View Template
index.ctp
C:\xampp\htdocs\mycakeapp\src\Template\Messages
<p>This is People table records.</p>
<?=$this->Form->create($entity,
['type'=>'post',
'url'=>['controller'=>'Messages',
'action'=>'index']]) ?>
<fieldset class="form">
person id
<?= $this->Form->error('Messages.person_id'); ?>
<?=$this->Form->text('Messages.person_id') ?>
Message
<?= $this->Form->error('Messages.message'); ?>
<?=$this->Form->text('Messages.message') ?>
<?=$this->Form->submit('投稿') ?>
</fieldset>
<?=$this->Form->end() ?>
<hr>
<table>
<thead><tr>
<th>ID</th><th>Message</th><th>name</th><th>created at</th>
</tr></thead>
<?php foreach($data->toArray() as $obj): ?>
<tr>
<td><?=h($obj->id) ?></td>
<td><?=h($obj->message) ?></td>
<td><?=h($obj->person->name) ?></td>
<td><?=h($obj->created_at) ?></td>
</tr>
<?php endforeach; ?>
</table>
6.
http://localhost/mycakeapp/messages