我开始学习MVC并编写自己的MVC模式,我只能做主控制器和主视图,但我不能理解如何制作另一个控制器/动作而我想制作一些从我的主视图链接到另一个页面。所以我有下一个文件夹和下一个simle代码: 在我的index.php中,我很简单:
<?php
ini_set('display_errors',1);
require_once 'myapp/bootstrap.php';
接下来,在我的bootstrap.php中,我连接了我的基类view.php,controller.php,route.php,我运行了Route函数run():
<?php
require_once 'base/view.php';
require_once 'base/controller.php';
require_once 'base/route.php';
include_once 'Numbers/Words.php';
Route::run(); //start routing
?>
在我的route.php中,我编写了这个函数run()
<?php
class Route
{
static function run()
{
// controller and action by defalt
$controller_name = 'Main';
$action_name = 'index';
$routes = explode('/', $_SERVER['REQUEST_URI']);
// get controller name
if ( !empty($routes[1]) )
{
$controller_name = $routes[1];
}
// get action name
if ( !empty($routes[2]) )
{
$action_name = $routes[2];
}
// add prefix
$controller_name = 'Controller_'.$controller_name;
$action_name = 'action_'.$action_name;
// add file with controller class
$controller_file = strtolower($controller_name).'.php';
$controller_path = "myapp/controllers/".$controller_file;
if(file_exists($controller_path))
{
include "myapp/controllers/".$controller_file;
}
else
{
Route::ErrorPage404();
}
// create controller
$controller = new $controller_name;
$action = $action_name;
if(method_exists($controller, $action))
{
// invoke action of controller
$controller->$action();
}
else
{
Route::ErrorPage404();
}
}
function ErrorPage404()
{
$host = 'http://'.$_SERVER['HTTP_HOST'].'/';
header('HTTP/1.1 404 Not Found');
header("Status: 404 Not Found");
header('Location:'.$host.'404');
}
}
它定义了我的控制器和acrions路线。 我也有我的Controller_Main:
<?php
class Controller_Main extends Controller
{
function action_index()
{
$this->view->generate('main_view.php', 'template_view.php');
}
}
它加载我的视图和模板:
<div class="title">
<h1>Paymentwall PHP Test</h1>
<h2>Number To String Convertion</h2>
</div>
<div class="convertion_form">
<form name="form" class="form" method="POST" action="main/index">
<label>Enter your Number Please:</label>
<input class="number_input" type="text" name="number_input">
<input type="submit" value="Convert">
</form>
</div>
Tamplate:
<!DOCTYPE html>
<html>
<head>
<title>Main Page</title>
<link rel="stylesheet" href="http://localhost:81/css/style.css">
<meta charset="utf-8">
</head>
<body>
<?php include 'myapp/views/'.$content_view; ?>
</body>
</html>
所以,我的问题是 - 我需要在我的route.php中创建另一个带动作的控制器,并加载另一个视图?以及如何将Main_View中的链接写入另一个视图?而且我也有一些网页表格,我需要在action=""
中写一下?
请帮助我,因为我无法理解自己并找到答案。
答案 0 :(得分:1)
您可以在控制器中创建另一个操作,如下所示:
public function action_submit()
{
$this->view->generate('blabla');
}
并将其链接为/main/submit
,或者您可以创建一个新的控制器文件并在其中添加一些操作。无论如何看看一些框架,CodeIgniter对初学者来说会很好,但是一旦你理解了它的工作原理就不要停下来,你可以学习更复杂的,最终来到Symfony2 / ZF2。
编辑:实际上,首先要更好地了解你的错误,它会给你更深入的知识。而关于框架 - 用Silex取代CodeIgniter(是的,我只是记得我在第一步中学习它)。