利用composer搭建PHP框架(二.控制器)

上一节(http://blog.csdn.net/mxdzchallpp/article/details/79219992)成功路由解析,解析成功后,需要实现具体到哪个控制器下的哪个方法。

创建控制器

1.在D:\WAMP\wamp\www\framework下创建app文件夹,进入app文件夹,创建index文件夹,进入index文件夹,分别创建controller、model、view文件夹:

cd D:\WAMP\wamp\www\framework
mkdir app
cd app
mkdir index
cd index
mkdir controller
mkdir model
mkdir view

在controller文件夹下创建index.php,内容如下:

<?php
namespace index\controller;

class index {

	public function index() {
		echo 'hello';
	}


}
2.路由解析到指定的控制器方法。

路由解析三层结构,比如index/user/getUser即是访问index下的user控制器下的getUser方法,slim中的路由配置'/{name}'表示接收name变量。修改D:\WAMP\wamp\www\framework\frame\App.php,内容如下:

<?php    
use \Psr\Http\Message\ServerRequestInterface as Request;    
use \Psr\Http\Message\ResponseInterface as Response;    
    
// 载入composer自动加载    
require ROOT_PATH . '/vendor/autoload.php';    
    
class App {    
    
    public static function run() {
		// 启用 slim路由
		$configuration = [
		    'settings' => [
		        'displayErrorDetails' => true, // 开启错误信息
		    ],
		];
		$c = new \Slim\Container($configuration);
		$app = new \Slim\App($c);
		$app->get('/', function (Request $request, Response $response, array $args) {
			echo 'route err.';
		});

		$app->get('/{platform}/{controller}/{method}', function (Request $request, Response $response, array $args) {
			// 新建控制器类 调用控制器方法
			$class_name = "{$args['platform']}\\controller\\{$args['controller']}";
			$class = new $class_name;
			$class->{$args['method']}();
		});
		$app->run();
	}
    
}   
修改D:\WAMP\wamp\www\framework\frame\FrameAutoLoad.php,使其加载控制器类

<?php

class FrameAutoLoad {

	/* 自动加载类 */
	public static function autoload($class) {
		if(false !== strpos($class, '\\')) {
			// 加载app下的文件
			$path = ROOT_PATH . '/app/' . str_replace('\\', '/', $class) . '.php';
			if(file_exists($path)) {
				require $path;
				return ;
			}
			return ;
		}
		// 加载frame框架下的文件
		$path = FRAME_PATH . $class . '.php';
		if(file_exists($path)) {
			require $path;
			return ;
		}
	}

}
浏览器输入http://127.0.0.1/index/index/index,显示hello则表示成功。

3.配置控制器配置文件

在D:\WAMP\wamp\www\framework\app\index\下创建config.php文件和common.php文件,其中config.php文件内容:

<?php

return array(
	'app_name' => 'index',

);
common.php文件内容(C方法是获取配置文件的配置项的值):

<?php

function C($key, $get_all = false, $config_key = null) {
	if(empty($config_key)) $config_key = '__config';
	return $get_all == false ? $GLOBALS[$config_key][$key] : $GLOBALS[$config_key];
}
修改D:\WAMP\wamp\www\framework\frame\App.php中的run方法,使其加载配置文件:

public static function run() {
	// 启用 slim路由
	$configuration = [
	    'settings' => [
	        'displayErrorDetails' => true, // 开启错误信息
	    ],
	];
	$c = new \Slim\Container($configuration);
	$app = new \Slim\App($c);
	$app->get('/', function (Request $request, Response $response, array $args) {
		echo 'route err.';
	});

	$app->get('/{platform}/{controller}/{method}', function (Request $request, Response $response, array $args) {
		// 加载平台路由下的配置文件
		self::loadConfigFile(ROOT_PATH . '/app/' . $args['platform']);

		// 新建控制器类 调用控制器方法
		$class_name = "{$args['platform']}\\controller\\{$args['controller']}";
		$class = new $class_name;
		$class->{$args['method']}();
	});
	$app->run();
}
这时我们在控制器类index.php中的index方法中,echo C('app_name')就会显示"index"。即修改D:\WAMP\wamp\www\framework\app\index\controller\index.php,内容:

<?php
namespace index\controller;

class index {

	public function index() {
		echo C('app_name');
	}


}











  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
搭建一个完整的博客系统需要以下几个步骤: 1. 环境配置 在本地或者服务器上安装好PHP环境,搭建好MySQL数据库,并安装好Composer。 2. 创建项目 使用Composer创建一个ThinkPHP 5项目,例如: ``` composer create-project topthink/think blog ``` 3. 数据库配置 在项目的config目录下创建一个database.php文件,设置数据库连接信息,例如: ```php <?php return [ // 数据库类型 'type' => 'mysql', // 服务器地址 'hostname' => '127.0.0.1', // 数据库名 'database' => 'blog', // 用户名 'username' => 'root', // 密码 'password' => '123456', // 端口 'hostport' => '', // 数据库编码默认采用utf8 'charset' => 'utf8', // 数据库表前缀 'prefix' => 'blog_', // 数据库调试模式 'debug' => true, ]; ``` 4. 创建数据表 使用ThinkPHP的数据库迁移工具创建数据表,例如: ``` php think migrate:run ``` 5. 创建模型 在app目录下创建一个model目录,用于存放模型类。例如,创建一个名为Article的模型类,文件路径为app/model/Article.php,代码如下: ```php <?php namespace app\model; use think\Model; class Article extends Model { protected $pk = 'id'; } ``` 6. 创建控制器 在app目录下创建一个controller目录,用于存放控制器类。例如,创建一个名为Index的控制器类,文件路径为app/controller/Index.php,代码如下: ```php <?php namespace app\controller; use app\model\Article; use think\Controller; class Index extends Controller { public function index() { $articles = Article::order('create_time', 'desc')->paginate(10); $this->assign('articles', $articles); return $this->fetch(); } public function detail($id) { $article = Article::find($id); $this->assign('article', $article); return $this->fetch(); } } ``` 7. 创建视图 在项目的view目录下创建一个index目录,用于存放Index控制器类的视图文件。例如,创建一个名为index.html的文件,代码如下: ```html {extend name="layout"} {block name="content"} <div class="articles"> {foreach $articles as $article} <div class="article"> <h2>{$article.title}</h2> <p>{$article.summary}</p> <a href="{url('index/detail', ['id' => $article.id])}">阅读全文</a> </div> {/foreach} </div> <div class="pagination"> {$articles->render()} </div> {/block} ``` 在项目的view目录下创建一个detail目录,用于存放Index控制器类的detail方法的视图文件。例如,创建一个名为detail.html的文件,代码如下: ```html {extend name="layout"} {block name="content"} <h2>{$article.title}</h2> <p>{$article.content}</p> {/block} ``` 8. 创建布局文件 在项目的view目录下创建一个layout.html的文件,用于作为所有页面的布局文件。例如,布局文件的代码如下: ```html <!doctype html> <html> <head> <meta charset="UTF-8"> <title>{$title}</title> </head> <body> <div class="header"> <h1>博客系统</h1> </div> <div class="container"> {block name="content"}{/block} </div> <div class="footer"> <p>版权所有 © 2021</p> </div> </body> </html> ``` 9. 配置路由 在项目的route目录下创建一个route.php文件,配置路由规则,例如: ```php <?php use think\facade\Route; Route::rule('/', 'index/index', 'get'); Route::rule('article/:id', 'index/detail', 'get')->pattern(['id' => '\d+']); ``` 10. 运行项目 在项目根目录下运行以下命令启动项目: ``` php think run ``` 至此,一个简单的博客系统就搭建好了。可以根据实际需求进行功能扩展和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值