2014-11-27 3 views
-1

Я начинаю изучать MVC, и я пишу свой собственный шаблон MVC, и я могу делать только основной контроллер и основной вид, но я не могу понять, как создать другой контроллер/действие, и я хочу сделайте некоторую ссылку с моего основного вида на другую страницу. Поэтому у меня есть следующие папки и и следующий код simle: В моей index.php У меня есть простой:MVC view-controller

<?php 
ini_set('display_errors',1); 
require_once 'myapp/bootstrap.php'; 

Далее в моем bootstrap.php я подключаю мои базовые классы view.php, controller.php, маршрут. PHP и я бегу функцию запустить Route():

<?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'); 
    } 
} 

Он загружает мой взгляд и tamplate:

<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.

+0

CodeIgniter - одна из худших фреймворков в PHP. Вы действительно не должны рекомендовать его. Особенно для новичков. –

Смежные вопросы