Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何组织控制器以获得最佳结构(MVC)_Php_Model View Controller_Code Organization - Fatal编程技术网

Php 如何组织控制器以获得最佳结构(MVC)

Php 如何组织控制器以获得最佳结构(MVC),php,model-view-controller,code-organization,Php,Model View Controller,Code Organization,组织控制器的最佳方式是什么。假设我有一个用户控制器和一个注册操作,我应该有一个process_注册操作来验证和处理数据,还是仅仅在注册操作本身中进行所有处理。我是否应该为每个需要验证/处理的操作(注册、流程注册等)制定验证/处理操作 我还注意到,很多人都有模块和控制器,仅用于验证和处理信息(我想可能是将所有验证逻辑和规则都放在一个位置上?) 我想我的问题是,事物必须分开多远?这个问题也适用于模型和视图。通常,您的验证应该在模型中进行;这就是MVC范例的要点。控制器逻辑是关于在动作之间跳跃用户,视

组织控制器的最佳方式是什么。假设我有一个用户控制器和一个注册操作,我应该有一个process_注册操作来验证和处理数据,还是仅仅在注册操作本身中进行所有处理。我是否应该为每个需要验证/处理的操作(注册、流程注册等)制定验证/处理操作

我还注意到,很多人都有模块和控制器,仅用于验证和处理信息(我想可能是将所有验证逻辑和规则都放在一个位置上?)


我想我的问题是,事物必须分开多远?这个问题也适用于模型和视图。

通常,您的验证应该在模型中进行;这就是MVC范例的要点。控制器逻辑是关于在动作之间跳跃用户,视图纯粹用于表示,业务逻辑位于模型中

某些框架(CodeIgniter)与MVC的意图大相径庭,它使模型成为没有逻辑(验证或其他)的平面对象,要求您将验证逻辑移动到控制器层,但此时您的“模型”根本不是真正的模型,而是美化的阵列

至于有两个操作“register”和“process_register”,我发现有一个操作更干净,它对post和get请求的响应不同。我将此操作称为“create”,以保持RESTful状态,并在框架定义的路径中定义一个路由,以将“/register”映射到“/user/create”

虚拟php示例:

<?php

class User_controller {
  // [GET|POST] /users/create
  function create() {
    $user = new User();
    $error = '';

    if (postback) {
      // form has been submitted.
      $user->name = $_POST['name'];
      $user->password = $_POST['pasword'];

      if (validate_user($user)) {
        $user->save();
        redirect("user/show/$user->id");
      }
      // user save failed, fall through to displaying the new user form
      // the user's name and password (and other fields) are now populated,
      // and will display
      $error = 'Account creation failed.';
    }

    // Render the view with the user and the error message (if any)
    render('views/users/create', $user, $error);
  }
}

?>

我的感觉是最好在模型中保留验证和“处理”。仅使用控制器管理将请求映射到模型函数


从“Zend Framework:Surviving The Deep End”(Zend Framework:Surviving The Deep End)这本书可能是一本不错的读物。

基于您的问题,我想我能给出的最好建议是,您希望在一个控制器中分解您的行为,使您的站点模块化。您还必须记住,如果您不断地从一个操作移动到另一个操作,那么处理和SEO都会有成本,因为操作必须与唯一的URL相关联

下面是一个您希望将注册与注册操作分开的用例: 您希望能够通过AJAX在站点的各个位置注册用户。通过转到注册页面并处理注册数据的不同操作,您很可能能够对注册页面以及任何页面上的注册灯箱或快速注册抽屉重复使用这些操作


如果您只打算使用静态注册页面,那么您就不想麻烦地拆分注册处理和注册页面了。这样,您就可以检查并查看是否正在接收表单数据,并在一个操作中同时执行表单显示和处理。

非常感谢,如果您能进一步解释您的模型在本例中的外观,那就太好了。。谢谢