2010-08-24 14 views
5

पर जा रहा हूं मैं अपना खुद का सरल एमवीसी बनाने पर काम कर रहा हूं और मैं नियंत्रक से देखने के लिए दिमागी तरीके से विचार कर रहा हूं। जिसमें कक्षा से चर को केवल एक सादे पुराने PHP पृष्ठ में भेजना शामिल है।नियंत्रक से देखने के लिए

मुझे यकीन है कि यह पहले कवर किया गया है, लेकिन मैं देखना चाहता था कि लोग किस प्रकार के विचारों के साथ आ सकते हैं।

//this file would be /controller/my_controller.php 

class My_Controller{ 

    function someFunction(){ 

    $var = 'Hello World'; 
    //how do we get var to our view file in the document root? 
    //cool_view.php 

    } 

} 

उत्तर

1

कुछ प्रकार का हैशटेबल ऐसा करने का एक अच्छा तरीका है। एसोसिएशन सरणी के रूप में अपने चर लौटें जो आपके दृश्य में सभी अंतराल को भर देगा।

+0

तो आप नियंत्रक में चर को वापस करने की सलाह देते हैं। और फिर दृश्य में $ vars = new my_controller(); और फिर उपयुक्त फ़ंक्शन का उपयोग करें। यह वास्तव में एक अच्छा आसान समाधान है। – Mike

1

स्टोर अपने नियंत्रक वस्तु में एक संपत्ति के रूप में अपने चर, फिर उन्हें जब

class My_Controller { 

    protected $locals = array(); 

    function index() { 
     $this->locals['var'] = 'Hello World'; 
    } 

    protected function render() { 
     ob_start(); 
     extract($this->locals); 
     include 'YOUR_VIEW_FILE.php'; 
     return ob_get_clean(); 
    } 
} 

प्रतिपादन निकालने आप इसे खूबसूरत

$this->var = 'test'; 
+0

'निकालने' के साथ वास्तव में सावधान रहें, http://ru2.php.net/manual/en/function.extract.php का उपयोग करने से पहले ध्यान से पढ़ें – Kirzilla

1

मैं बनाने के लिए उन जादू __get और __set तरीकों परिभाषित कर सकते हैं यह करने के लिए मेरा खुद का सरल एमवीसी और most simple way भी विकसित करना है ...

class My_Controller 
{ 

    function someFunction() { 
     $view_vars['name'] = 'John'; 
     $view = new View('template_filename.php', $view_vars); 
    } 

} 

देखें वर्ग

class View 
{ 
    public function __construct($template, $vars) { 
     include($template); 
    } 
} 

template_filename.php

Hello, <?php echo $vars['name'];?> 

मैं अत्यधिक सुझाव देते हैं मैं मुक्त पीएचपी बेशक मुझे का आयोजन कर रहा हूँ के लिए मेरे अपने MVC बनाया पीएचपी सावंत http://phpsavant.com/docs/

0

पर एक नज़र लेने के लिए कुछ हद तक लोग PHP पर बेहतर होना चाहते हैं।

ऐसा करने का सबसे अच्छा तरीका कमांड + फैक्टरी पैटर्न का उपयोग करना है।

उदा।

interface ControllerCommand 
{ 
    public function execute($action); 
} 

प्रत्येक नियंत्रक में:

class UserController implements ControllerCommand 
{ 
    public function execute($action) 
    { 
     if ($action == 'login') 
     { 
      $data['view_file'] = 'views/home.tpl.php'; 
     } 
     else if ($action == 'edit_profile') 
     { 
      $data['view_file'] = 'views/profile.tpl.php'; 
      $data['registration_status'] = $this->editProfile(); 
     } 

     return $data; 
    } 
} 

आपका मुख्य सामने नियंत्रक से:

$data = ControllerCommandFactory::execute($action); 
if (!is_null($data)) { extract($data); } 
/* We know the view_file is safe, since we explicitly set it above. */ 
require $view_file; 

मुद्दा यह है कि हर Controllercommand वर्ग एक निष्पादित कार्य है और है कि इसके दृश्य और किसी भी डेटा रिटर्न उस दृश्य के लिए।

पूर्ण एमवीसी के लिए, आप थियोडोर [at] phpexperts.pro पर मुझे ईमेल करके ओपन सोर्स ऐप तक पहुंच सकते हैं।

1

मैं चेकआउट Zend_View और यह दृश्य प्रतिपादन को कैसे पूरा करेगा।

आप GitHub पर View और AbstractView का स्रोत प्राप्त कर सकते हैं - unfortunaly मैं वर्तमान भंडार (SVN में) नहीं पाते हैं कि आसान ब्राउज़ करने के लिए।

अनिवार्य रूप से दृश्य चर View ऑब्जेक्ट (जिसमें आपके नियंत्रक तक पहुंच होगी) में निहित है, तो टेम्पलेट (सादा पुराना PHP दस्तावेज़) उस ऑब्जेक्ट के अंदर प्रस्तुत किया जाता है।यह विधि टेम्पलेट को $this तक पहुंच की अनुमति देती है। कुछ

यह होगा की तरह:

<?php 
class View 
{ 
    public function render() 
    { 
    ob_start(); 
    include($this->_viewTemplate); //the included file can now access $this 
    return ob_get_clean(); 
    } 
} 
?> 
अपने नियंत्रक में

तो:

<?php 
class Controller 
{ 
    public function someAction() 
    { 
    $this->view->something = 'somevalue'; 
    } 
} 
?> 

और अपने टेम्पलेट:

<p><?php echo $this->something;?></p> 

मेरी राय में इस पैटर्न आप के साथ ज्यादा लचीलापन देता है दृश्य

संबंधित मुद्दे