Как вызвать мои (миниатюрные) методы mvc из HTML (PHP) форм? - PullRequest
1 голос
/ 04 января 2012

У меня в коде есть соответствующий код:

https://gist.github.com/1561520

Мне было интересно, может ли кто-нибудь сказать мне, каким будет правильный способ вызова метода ReportsController-> create () из моей формы. Единственная идея, которую я могу придумать, состоит в том, чтобы форма имела случайное действие, что-то вроде action="application/views/reports/new.php", и вызывала мои контроллеры для создания метода оттуда. Проблема в том, что это не соответствует цели функции __autoload, если я не ошибаюсь.

Спасибо за вашу помощь!

Ответы [ 2 ]

2 голосов
/ 11 января 2012

Я бы попробовал простой маршрутизатор, такой как PHP-маршрутизатор .

<?php

require 'Router.php';

$r = new Router();

// maps '/report/create' to controller ReportsController->create().
$r->match('/report/create','ReportsController#create');

if($r->hasRoute()) { ?>

    <h1>Route found!</h1>
    <p><b>Controller: </b><?php echo $r->getRoute()->controller; ?></p>
    <p><b>Action: </b><?php echo $r->getRoute()->action; ?></p>
    <p><b>Params: </b><?php var_dump($r->getRoute()->params); ?></p>

<?php

// Load controller
$controller = new $r->getRoute()->controller;

// Call controller action, and pass params
call_user_func_array(array($controller, $r->getRoute()->action), $r->getRoute()->params);

}
else
{
    die('<h1>No route found.</h1>');
}
0 голосов
/ 08 января 2012

Обязательная структура - это не что иное, как логика внутри вашего index.php для автоматической загрузки соответствующего контроллера, в зависимости от свойств HTTP-запроса, особенно URI.

Вы можете смешать семантику RESTful, если хотите. Таким образом, POST к /reports с данными из формы создаст отчет. GET для /reports/... будет получать отчет и т. Д. *

В прошлом я использовал $ _ SERVER ['PATH_INFO'] .

Таким образом, форма будет POST к index.php/reports, что даст вашему index.php достаточно информации, чтобы принять решение о создании экземпляра контроллера для обработки запроса. Вы можете закодировать дополнительные параметры в URI, например index.php/reports/create, но это немного уродливый IMO. Я лично предпочел бы RESTful концепции здесь. Поэтому, если вы хотите использовать RESTful, вам нужно проверить $ _SERVER ['REQUEST_METHOD'] и решить, какую функцию вызывать. Было бы разумно решить и стандартизировать то, что вы хотите назвать функцией, которая обрабатывает каждый метод HTTP, например, Create for POST, Fetch for GET, Remove for DELETE и т. Д.

Теперь, когда мы знаем, какой контроллер загружать и каким должно быть действие, вам нужно разрешить контроллеру создать экземпляр Модели, а затем вызвать соответствующую функцию в зависимости от метода (или дополнительных параметров в PATH_INFO).

Надеюсь, я дал вам достаточно, чтобы вы могли справиться с этой проблемой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...