php 访问视图文件夹,如何在子文件夹PHP中呈现视图

本文档记录了一位开发者在使用自定义MVC框架构建中小企业网站时遇到的问题,即如何在子文件夹中正确渲染视图。通过分析药物控制器和应用核心类的代码,展示了如何处理URL路径并调用相应的视图文件。在尝试加载'medicine1/forms/male'视图时遇到了困扰,目前尚未找到解决方案。
摘要由CSDN通过智能技术生成

我是MVC的新手,刚开始练习它.我正在创建一个中小型企业网站,并且不想使用任何大型框架,所以我找到了

this,到目前为止它工作得很好.我似乎唯一不理解的是如何在子文件夹中呈现视图.

我有3种药物需要显示信息,它们的结构如下:

views

--medicines

----medicine1

------info.php

------forms

--------male.php

--------female.php

这是药物控制器:

class MedicinesController extends Controller

{

/**

* Construct this object by extending the basic Controller class

*/

public function __construct()

{

parent::__construct();

Auth::checkAuthentication();

}

/**

* Handles what happens when user moves to URL/medicines/index

**/

public function index()

{

$this->View->render('medicines/index');

}

/**

* Handles what happens when user moves to URL/medicines/medicine1

**/

public function medicine1()

{

$this->View->render('medicines/medicine/info', array(

'files' => FilesModel::getMedicineFiles())

);

}

/**

* Handles what happens when user moves to URL/medicines/medicine1/forms/male

**/

public function male()

{

$this->View->render('medicines/imnovid/forms/male');

}

}

这是处理控制器的类:

/**

* Class Application

* The heart of the application

*/

class Application

{

/** @var mixed Instance of the controller */

private $controller;

/** @var array URL parameters, will be passed to used controller-method */

private $parameters = array();

/** @var string Just the name of the controller, useful for checks inside the view ("where am I ?") */

private $controller_name;

/** @var string Just the name of the controller's method, useful for checks inside the view ("where am I ?") */

private $action_name;

/**

* Start the application, analyze URL elements, call according controller/method or relocate to fallback location

*/

public function __construct()

{

// create array with URL parts in $url

$this->splitUrl();

// creates controller and action names (from URL input)

$this->createControllerAndActionNames();

// does such a controller exist ?

if (file_exists(Config::get('PATH_CONTROLLER') . $this->controller_name . '.php')) {

// load this file and create this controller

// example: if controller would be "car", then this line would translate into: $this->car = new car();

require Config::get('PATH_CONTROLLER') . $this->controller_name . '.php';

$this->controller = new $this->controller_name();

// check for method: does such a method exist in the controller ?

if (method_exists($this->controller, $this->action_name)) {

if (!empty($this->parameters)) {

// call the method and pass arguments to it

call_user_func_array(array($this->controller, $this->action_name), $this->parameters);

} else {

// if no parameters are given, just call the method without parameters, like $this->index->index();

$this->controller->{$this->action_name}();

}

} else {

// load 404 error page

require Config::get('PATH_CONTROLLER') . 'ErrorController.php';

$this->controller = new ErrorController;

$this->controller->error404();

}

} else {

// load 404 error page

require Config::get('PATH_CONTROLLER') . 'ErrorController.php';

$this->controller = new ErrorController;

$this->controller->error404();

}

}

/**

* Get and split the URL

*/

private function splitUrl()

{

if (Request::get('url')) {

// split URL

$url = trim(Request::get('url'), '/');

$url = filter_var($url, FILTER_SANITIZE_URL);

$url = explode('/', $url);

// put URL parts into according properties

$this->controller_name = isset($url[0]) ? $url[0] : null;

$this->action_name = isset($url[1]) ? $url[1] : null;

// remove controller name and action name from the split URL

unset($url[0], $url[1]);

// rebase array keys and store the URL parameters

$this->parameters = array_values($url);

}

}

/**

* Checks if controller and action names are given. If not, default values are put into the properties.

* Also renames controller to usable name.

*/

private function createControllerAndActionNames()

{

// check for controller: no controller given ? then make controller = default controller (from config)

if (!$this->controller_name) {

$this->controller_name = Config::get('DEFAULT_CONTROLLER');

}

// check for action: no action given ? then make action = default action (from config)

if (!$this->action_name or (strlen($this->action_name) == 0)) {

$this->action_name = Config::get('DEFAULT_ACTION');

}

// rename controller name to real controller class/file name ("index" to "IndexController")

$this->controller_name = ucwords($this->controller_name) . 'Controller';

}

}

配置

/**

* Configuration for: Folders

* Usually there's no reason to change this.

*/

'PATH_CONTROLLER' => realpath(dirname(__FILE__).'/../../') . '/application/controller/',

'PATH_VIEW' => realpath(dirname(__FILE__).'/../../') . '/application/view/',

/**

* Configuration for: Default controller and action

*/

'DEFAULT_CONTROLLER' => 'index',

'DEFAULT_ACTION' => 'index',

和渲染

public function render($filename, $data = null)

{

if ($data) {

foreach ($data as $key => $value) {

$this->{$key} = $value;

}

}

require Config::get('PATH_VIEW') . '_templates/header.php';

require Config::get('PATH_VIEW') . $filename . '.php';

require Config::get('PATH_VIEW') . '_templates/footer.php';

}

编辑

如果我做var_dump();我得到这个输出:

D:\Programs\wamp64\www\ermp.ee\application\core\Application.php:84:

object(Application)[3]

private 'controller' => null

private 'parameters' =>

array (size=2)

0 => string 'forms' (length=5)

1 => string 'male' (length=4)

private 'controller_name' => string 'medicines' (length=9)

private 'action_name' => string 'imnovid' (length=7)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值