Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Правильное ли построение архитеутуры mvc?
Форумы портала PHP.SU » » Объектно-ориентированное программирование » Правильное ли построение архитеутуры mvc?

Страниц (1): [1]
 

1. koks - 27 Июня, 2015 - 16:34:47 - перейти к сообщению
Здравсвуйте!
Изучаю PHP OOP , решил построить приложение по шаблону МVC
Прощу подсказать знатаков ,может где неправильно делаю.
Заранее спасибо.

Вот так я вижу саму архитектуру
Cotroller-директория
Model-директория
View-директория
.htaccess
config.php
index.php
route.php

index.php -точка входа
<?php
require_once 'route.php';
require_once 'view/View.php';
require_once 'model/Model.php';
require_once 'controller/Controller.php';


$one=new Route();
$model=new Model();
$model->show();
$view=new View();


route-разбирает адресную строку , и в зависимости от передоного параметра подключает нужный контролер
<?php
require_once 'config.php';
class Route{

public $controller="Index";

function __construct(){
if(rtrim($_SERVER['REQUEST_URI'],' /')==""){
require_once 'controller/Controller.php';
$this->controller =new Index();
return true;
}

if(file_exists('controller/'.$_SERVER['REQUEST_URI'].'.php')){
$url= trim($_SERVER['REQUEST_URI'], ' /');
require_once 'controller/'.$url.'.php';
$this->controller =new $url();
}
else{
echo 'wrong';
exit;
}
}
}


файл .htaccess перенаправляет все запросы в index.php
<IfModule mod_rewrite.c>
RewriteEngine On
Options +FollowSymlinks
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ index.php [NC,L]
</IfModule>
2. tato - 30 Июня, 2015 - 09:51:38 - перейти к сообщению
в index.php только роутер, он парсит запрос и на его основе дергает нужный контроллер и нужное действие в нем

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. controllers/
  3.   DefaultController.php
  4.   PostController.php
  5.   ...
  6.  


PHP:
скопировать код в буфер обмена
  1.  
  2. class DefaultController {
  3.     public function actionIndex() {
  4.         ...
  5.     }
  6.  
  7.     public function actionAbout() {
  8.         ...
  9.     }
  10. }
  11.  



Получиться что-то такое:
PHP:
скопировать код в буфер обмена
  1.  
  2. class Route {
  3. ...
  4.     public function run() {
  5.         $this->parseUrl();
  6.         // теперь нам доступны след. члены
  7.         $controller = $this->getController();
  8.         $action = $this->getAction();
  9.         $params = $this->getParams();
  10.  
  11.         require_once("controllers/{$controller}.php");
  12.  
  13.         call_user_func_array([$controller, 'action' . ucfirst($action)], $params);
  14.     }
  15. ...
  16. }
  17.  



Модели вызываются уже в контроллере.
PHP:
скопировать код в буфер обмена
  1.  
  2. class PostController {
  3. ...
  4.     public function actionPost($id) {
  5.         $model = Post::findByPk($id);
  6.         $this->render('post_page', ['model'=>$model]);
  7.     }
  8. ...
  9. }
  10.  



ну а представление это набор шаблончиков:
views/post_page.php
[HTML]
<small><?php $model->created; ?></small>
<h4><?php echo $model->title; ?></h4>
<p><?php echo $model->body; ?></p>
[/HTML]

 

Powered by ExBB FM 1.0 RC1