MVC view-controller

Я начинаю изучать MVC и пишу свой собственный шаблон MVC, и я могу делать только основной контроллер и главный вид, но я не могу понять, как создать другой контроллер / действие, и я хочу сделать какую-то ссылку из моего основного посмотреть на другую страницу. Итак, у меня есть следующие папки и следующий код: В моем 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');
    }
}

Это определяет мои контроллеры и маршруты. И у меня также есть мой 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=""??? Пожалуйста, помогите мне, потому что я не могу понять себя и найти ответ.

1 ответ

Вы можете создать другое действие в вашем контроллере следующим образом:

public function action_submit()
{
     $this->view->generate('blabla');
}

И связать это как /main/submit или вы можете создать новый файл контроллера и добавить в него некоторые действия. В любом случае, загляните в некоторые фреймворки, CodeIgniter подойдет новичку, но не останавливайтесь на этом, когда вы поймете, как он работает, вы можете изучить более сложные, в конечном итоге перейдя к Symfony2/ZF2.

Изменить: На самом деле лучше сначала учиться на своих ошибках, это даст вам гораздо больше глубоких знаний. А насчет фреймворков - замените CodeIgniter (да, это дерьмо, я просто помню, что я учился с ним на первых шагах) на Silex.

Другие вопросы по тегам