最近我開始學習Lavarel,是一個非常好的PHP框架。目前我正試圖讓自己的MVC類似於Lavarel的工作原理。MVC架構像laravel
我的邏輯
我們設定的路線,然後我們檢查當前的URL存在,並從那裏,我們將設置控制器和方法從'uses'
,如果沒有,我們將控制器設置爲ERROR
。 問題是我無法訪問$ routes變量。
如果我嘗試static::$routes = ..
php的顯示錯誤,但Lavarel正常工作,即使我的PHP版本是5.2 。我不明白整個事情是如何運作的。此外,如果u有任何建議,如何組織架構:)
的index.php
include 'router.php';
include 'route.php';
Route::get('about',array('uses'=> '[email protected]'));
Route::get('about2',array('uses'=> '[email protected]'));
router.php
class Router {
public static $routes = array(
'GET' => array(),
'POST' => array(),
'PUT' => array(),
'DELETE' => array(),
'PATCH' => array(),
'HEAD' => array(),
);
public $valid = false;
public static $methods = array('GET', 'POST', 'PUT', 'DELETE', 'HEAD');
public static function register($method, $route, $action)
{
if (ctype_digit($route)) $route = "({$route})";
if (is_string($route)) $route = explode(', ', $route);
foreach ((array) $route as $uri){
if (is_array($action)){
$routes[$method][$uri] = $action;
}
}
$request = $_SERVER['REQUEST_URI'];
$request = trim($request, '/');
$exist = array_key_exists($request, $routes[$method]);
if($exist){
$valid = true;
}
echo $valid;
// print_r($routes);
}
}
route.php
class Route {
public static function get($route, $action)
{
Router::register('GET', $route, $action);
}
}
既然你正在建立自己的框架,我建議到處丟棄所有的'static's 。他們只是真的很難單元測試你的代碼。而是看看[依賴注入](http://en.wikipedia.org/wiki/Dependency_injection)。 – PeeHaa 2012-07-28 14:11:19
好的,謝謝你 – Ben 2012-07-28 14:35:27
我正在刪除**'mvc' **標籤。這個問題與它完全無關。 – 2012-07-28 14:58:44