[CakePHP3.10] ビューテンプレート

public $autoRender = false; を外すとviewテンプレートが使える様になる

view templateとlayoutがある
layoutにビューテンプレートをはめ込む

src/Template/Hello/index.ctp

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>Hello</title>
	<style>
		h1 {
			font-size: 60pt;
			margin: 0px 0px 10px 0px; padding: 0px 20px; color: white;
			background: linear-gradient(to right, #aaa, #fff);
		}
		p { font-size: 14pt; color: #666; }
	</style>
</head>
<body>
	<header class="row">
		<h1><?=$title ?></h1>
	</header>
	<div class="row">
		<p><?=$message ?></p>
	</div>
</body>
</html>

HelloController.php

class HelloController extends AppController {

	public function index(){
		$this->viewBuilder()->autoLayout(false);
		$this->set('title', 'Hello!');
		$this->set('message', 'This is message!');
	}
}

配列で渡す場合

	public function index(){
		$this->viewBuilder()->autoLayout(false);
		$values = [
			'title' => "hello!",
			"message" => "this is message!!!"
		];
		$this->set($values);
	}

autoLayout(false);で自動レイアウトをoffにしている

OK, controllerとviewの関係性はなんとなく分かったぞ!

CakePHP3系

内蔵サーバー
$ php ./bin/cake.php server -H 0.0.0.0 –port 8080

### View
webroot/hello.html

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>Hello</title>
	<style>
		h1 {
			font-size: 60pt;
			margin: 0px 0px 10px 0px; padding: 0px 20px; color: white;
			background: linear-gradient(to right, #aaa, #fff);
		}
		p { font-size: 14pt; color: #666; }
	</style>
</head>
<body>
	<header class="row">
		<h1>Welcome!</h1>
	</header>
	<div class="row">
		<p>This is sample HTML page.</p>
	</div>
</body>
</html>

### Controller
src/Controller/HelloController.php

namespace App\Controller;

use App\Controller\AppController;

class HelloController extends AppController {
	public $autoRender = false;

	public function index(){
		echo "<html><body><h1>Hello!</h1>";
		echo "<p>This is sample page.</p></body></html>";
	}
}

http://192.168.56.10:8080/hello
### クエリパラメータ

	public function index(){
		$id = $this->request->query['id'];
		$pass = $this->request->query['pass'];
		echo "<html><body><h1>Hello!</h1>";
		echo "<ul><li>your id: " . $id . "</li>";
		echo "<li>password: " . $pass . "</li></ul>";
		echo "</body></html>";
	}

http://192.168.56.10:8080/hello?id=taro&pass=yamada

パラメータなしに対応
-> if文で制御する

	public function index(){
		$id = "no name";
		if(isset($this->request->query['id'])){
			$id = $this->request->query['id'];
		}
		$pass = "no password";
		if(isset($this->request->query['pass'])){
			$id = $this->request->query['pass'];
		}

		echo "<html><body><h1>Hello!</h1>";
		echo "<ul><li>your id: " . $id . "</li>";
		echo "<li>password: " . $pass . "</li></ul>";
		echo "</body></html>";
	}

オブジェクトをjsonで返す

namespace App\Controller;

use App\Controller\AppController;

class HelloController extends AppController {
	public $autoRender = false;

	private $data = [
		["name"=>"taro", "mail"=>"taro@yamada", "tel"=>"090-999-999"],
		["name"=>"hanako", "mail"=>"hanako@flower", "tel"=>"080-888-888"],
		["name"=>"sachiko", "mail"=>"sachiko@happy", "tel"=>"070-777-777"]
	];

	public function index(){
		$id = 0;
		if(isset($this->request->query['id'])){
			$id = $this->request->query['id'];
		}
		echo json_encode($this->data[$id]);
	}
}

なるほどー ちょっと理解した