上一章我阐述了如何修改sspanel的视图,这一章为大家带来页面定向控制以及controller代码的修改
我们知道ssapnelV3是基于mvc架构,页面的访问并不是直接访问到页面文件,而是由controller处理后再返回的html源码。我也提及到,网页的根目录是public,不过关于页面定向的实际处理文件是的app文件夹下的routes.php(不同魔改版本位置略有差异,例如glzjin的魔改版本位置是config文件夹下)具体位置可以在public的index.php中找到
run();
这里的routes.php是在app目录下,打开这个文件
[
'debug' => $debug,
'whoops.editor' => 'sublime'
]
]);
$app->add(new WhoopsMiddleware);
// Home
$app->get('/', 'App\Controllers\HomeController:index');
$app->get('/code', 'App\Controllers\HomeController:code');
$app->get('/tos', 'App\Controllers\HomeController:tos');
$app->get('/debug', 'App\Controllers\HomeController:debug');
$app->post('/debug', 'App\Controllers\HomeController:postDebug');
//$app->get('/about', 'App\Controllers\HomeController:about');
$app->get('/client', 'App\Controllers\HomeController:client');
$app->get('/nodeList', 'App\Controllers\UserController:nodeList');
// User Center
$app->group('/user', function () {
$this->get('', 'App\Controllers\UserController:index');
$this->get('/', 'App\Controllers\UserController:index');
$this->post('/checkin', 'App\Controllers\UserController:doCheckin');
$this->get('/node', 'App\Controllers\UserController:node');
$this->get('/node/{id}', 'App\Controllers\UserController:nodeInfo');
$this->get('/profile', 'App\Controllers\UserController:profile');
$this->get('/invite', 'App\Controllers\UserController:invite');
$this->post('/invite', 'App\Controllers\UserController:doInvite');
$this->get('/edit', 'App\Controllers\UserController:edit');
$this->post('/password', 'App\Controllers\UserController:updatePassword');
$this->post('/sspwd', 'App\Controllers\UserController:updateSsPwd');
$this->post('/method', 'App\Controllers\UserController:updateMethod');
$this->get('/sys', 'App\Controllers\UserController:sys');
$this->get('/trafficlog', 'App\Controllers\UserController:trafficLog');
$this->get('/kill', 'App\Controllers\UserController:kill');
$this->post('/kill', 'App\Controllers\UserController:handleKill');
$this->get('/logout', 'App\Controllers\UserController:logout');
})->add(new Auth());
这个是我修改后的代码,所以能够看到新增的两行
$app->get('/client', 'App\Controllers\HomeController:client');
$app->get('/nodeList', 'App\Controllers\UserController:nodeList');
如果在浏览器中访问www.baidu.com/client,那么这个路径就会由App\Controllers\HomeController:client这个方法去处理,HomeController就是页面的控制器,按图索骥找到app\controller下的源码文件
/**
* HomeController
*/
class HomeController extends BaseController
{
public function index()
{
$homeIndexMsg = DbConfig::get('home-index');
return $this->view()->assign('homeIndexMsg', $homeIndexMsg)->display('index.tpl');
}
public function code()
{
$msg = DbConfig::get('home-code');
$codes = InviteCode::where('user_id', '=', '0')->take(10)->get();
return $this->view()->assign('codes', $codes)->assign('msg', $msg)->display('code.tpl');
}
public function debug($request, $response, $args)
{
$server = [
"headers" => $request->getHeaders(),
"content_type" => $request->getContentType()
];
$res = [
"server_info" => $server,
"ip" => Http::getClientIP(),
"version" => Config::get('version'),
"reg_count" => Check::getIpRegCount(Http::getClientIP()),
];
Logger::debug(json_encode($res));
return $this->echoJson($response, $res);
}
public function tos()
{
return $this->view()->display('tos.tpl');
}
public function client()
{
return $this->view()->display('client.tpl');
}
public function debug($request, $response, $args)
{
$server = [
"headers" => $request->getHeaders(),
"content_type" => $request->getContentType()
];
$res = [
"server_info" => $server,
"ip" => Http::getClientIP(),
"version" => Config::get('version'),
"reg_count" => Check::getIpRegCount(Http::getClientIP()),
];
Logger::debug(json_encode($res));
return $this->echoJson($response, $res);
}
可以获取请求的参数,处理后通过response返回json或其他格式数据。
上面我们新增了一个静态页面,如果要加一个动态页面那该如何?上段代码中,有个主页的index方法
public function index()
{
$homeIndexMsg = DbConfig::get('home-index');
return $this->view()->assign('homeIndexMsg', $homeIndexMsg)->display('index.tpl');
}
->assign('homeIndexMsg', $homeIndexMsg)这个方法就是向view传递数据对象,类似于map键值对,键是homeIndexMsg,值是$homeIndexMsg对象,在对应的index.tpl中就可以通过键引用到对象的值
settemplatedir(BASE_PATH.'/resources/views/'.Config::get('theme').'/'); //设置模板文件存放目录
$smarty->setcompiledir(BASE_PATH.'/storage/framework/smarty/compile/'); //设置生成文件存放目录
$smarty->setcachedir(BASE_PATH.'/storage/framework/smarty/cache/'); //设置缓存文件存放目录
// add config
$smarty->assign('config',Config::getPublicConfig());
$smarty->assign('user',Auth::getUser());
$smarty->assign('analyticsCode',DbConfig::get('analytics-code'));
return $smarty;
}
}