前言:前面的课程已经把Helloworld和view的基本原理进行了阐述,下面将对controller和view进一步阐述。
1.controller接受参数
修改StoreController.php代码如下.这里使用了部分PHP 7 scalar数据类型的特性。
<?php
declare(strict_types=1);
class StoreController extends ControllerBase
{
public function indexAction()
{
}
// process/yy/30/true
public function processAction(string $username = "GG",int $age = 12,bool $expired = false ):void{
echo "Processing<br>";
echo $username,"<br>";
echo $age,"<br>";
echo $expired,"<br>";
}
}
浏览器敲入http://localhost/store/process/yy/30/false
显示如下
2.进一步把接受的参数传给其他action
把接受的参数转给testAction, 代码如下.
<?php
declare(strict_types=1);
class StoreController extends ControllerBase
{
public function indexAction()
{
}
// process/yy/30/false
public function processAction(string $username = "GG",int $age = 12,bool $expired = false ):void{
echo "Processing<br>";
echo $username,"<br>";
echo $age,"<br>";
echo $expired,"<br>";
$this->dispatcher->forward([
'controller'=>'store',
'action'=>'test'
]);
}
public function testAction(){
echo 'Just for TESTING';
}
}
效果如下。
3.StoreController.php只初始化函数
有时候需要对contrller进行一些初始化操作,而php OOP中默认的构造函数__construct在controller类不能使用(代码如下)
<?php
declare(strict_types=1);
class StoreController extends ControllerBase
{
public function __construct(){
}
会报错,如果需要,需要使用onConstruct,则不会报错
class StoreController extends ControllerBase
{
public function onConstruct(){
}
另一个选择是创建一个initialize函数,如下
<?php
declare(strict_types=1);
class StoreController extends ControllerBase
{
public function onConstruct(){
}
public function initialize(){
echo '****let\'s goo ******';
}
接上例,效果如下:
4.传递参数给view
首先,创建app/views/store/process.pthml文件,用以渲染processAction,代码如下
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<?php echo 'Got your name = ', $username,'<br>';?>
<?php echo 'Got your age = ', $age,'<br>';?>
<?php echo 'Got your status = ', $single,'<br>';?>
</body>
</html>
修改StoreController.php文件
<?php
declare(strict_types=1);
class StoreController extends ControllerBase
{
public function onConstruct(){
}
public function initialize(){
echo '****let\'s goo ******';
}
public function indexAction()
{
}
// process/yy/30
public function processAction(string $username = "GG",int $age = 12,bool $expired = false ):void{
$this->view->setVar('username',$username);
$this->view->setVar('age',$age);
$this->view->setVar('single',$expired);
}
public function testAction(){
echo 'Just for TESTING';
}
}
效果如下
后记: 文件目录中app/views/index.phtml是个最高的模板,其他的内容都是以
<?php echo $this->getContent(); ?>
而与该模板进行拼装。
比如,app/views/signup/index.phtml的内容其实是被引入到app/views/index.phtml进而进行显示的。而诸如bootstrap的文件也是在这个模板中引入的。