【问题标题】:Setting local variables cleanly in a MVC pattern in PHP在 PHP 中以 MVC 模式干净地设置局部变量
【发布时间】:2015-04-20 17:45:55
【问题描述】:

我正在尝试使用 MVC 模式在某些代码中设置本地变量,即

$action=basename(__FILE__, '.php');               // load action from filename for consistancy (index for this case)
$controller = new seoController($action . '-seo'); // register controller with page action and parameter
$controller->invoke();                            // invoke controller for processing

$page_title = "<insert page title here>";
$page_desc = "<insert page desc here>";
$page_keys = "<insert page keywords here>";

当然,控制器会调用模型并执行所有后端工作来解析输入、获取数据然后返回。

我想要的是一种干净的方法,可以从 seoModel 中设置本地 $page_title 等变量,该变量在 setController 中实例化,而不使用 $_SESSION 或任何其他 hacky 方式。

可以从设计 POV 中将方法放入控制器中以获取信息吗?即

$page_title = seoController->getPageTitle();

到目前为止,我的控制器还没有以这种方式使用,因为它们所做的只是将我的模型连接到视图。

我希望我的解释足够清楚。

【问题讨论】:

    标签: php design-patterns model-view-controller


    【解决方案1】:

    是否可以从设计 POV 中将方法放入控制器中以获取信息?

    是的,这就是 Controller 的用途。

    我想要的是一种干净的方法,可以从在 setController 中实例化的 seoModel 中设置本地 $page_title 等变量,而无需使用 $_SESSION 或任何其他 hacky 方式。

    为了避免使用$_SESSION,这对于这种特殊情况似乎有点矫枉过正,您可以设置seoController 属性,例如,

    Class seoController
    {
        $public $page_tile = '';
    
        public method getPageTitle()
        {
            $model = new seoModel();
            $page_title = $model->get_page_title();
            $this->page_tile = $page_title;
            //you could also return the page title here, skipping that  
        }
    }
    

    并从调用者访问它们

    $controller = new seoController;
    $controller->getPageTitle();
    $page_title = $controller->page_title;
    

    【讨论】:

      【解决方案2】:

      您通常会将诸如元标记之类的内容与它所描述的模型一起存储。因此,如果您正在加载模型中的产品,那么该模型也可能返回该产品的元标记:

      public function show($productId)
      {
          $product = $this->productModel->findById($productId);
      
          // Meta title may be available at $product->meta_title
      
          return new ViewModel(array(
              'product' => $product,
          ));
      }
      

      然后,您的控制器操作将返回需要在视图中显示的数据,可以是 HTML 模板、JSON、XML 等。

      【讨论】:

      • 也很有帮助...我喜欢这种风格..希望我可以将这两个答案都标记为正确:)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多