momik/simple-mvc

此包已被废弃且不再维护。未建议替代包。
此包最新版本(v1.5-stable)无可用许可证信息。

v1.5-stable 2022-09-29 05:40 UTC

This package is auto-updated.

Last update: 2023-10-29 03:26:41 UTC


README

一个从头开始构建的简单PHP MVC框架。

先决条件

  • XAMPP或手动创建的环境,包含

    • PHP 8.0+

        sudo apt update
        sudo apt install lsb-release ca-certificates apt-transport-https software-properties-common -y
        sudo add-apt-repository ppa:ondrej/php
        sudo apt install php8.0 -y
        sudo apt install php8.0-cli php8.0-common php8.0-mbstring -y
      
    • MySQL数据库

        sudo apt update
        sudo apt install mysql-server
      
    • Apache2

        sudo apt update
        sudo apt install apache2
      
  • Composer

      sudo apt update
      cd ~
      curl -sS https://getcomposer.org.cn/installer -o /tmp/composer-setup.php
    
      HASH=`curl -sS https://composer.github.io/installer.sig`
      php -r "if (hash_file('SHA384', '/tmp/composer-setup.php') === '$HASH') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
    
      sudo php /tmp/composer-setup.php --install-dir=/usr/local/bin --filename=composer
    
      composer
    

安装

入门

  • 数据库

    编辑 .env 文件来配置数据库。
    • DB_DSN = ......dbname ='test_db' 中设置数据库名称
    • DB_USER = root 中设置用户名
    • DB_PASSWORD = password 中设置密码
  • 迁移

    运行 migrations.php 以初始化数据库
    php migrations.php
    
    您可以通过在 ' migrations ' 目录中添加脚本来操作数据库和表。
    • 迁移脚本没有严格的命名约定。
    • 迁移脚本需要是一个类,其类名为文件名。
    • 迁移类需要具有 up()down() 方法。
    • 运行 migrations.php 以使更改生效。

文档

  • 入口点

    • public/index.php 是应用的入口点。
    • public/index.php 决定了如何处理HTTP请求。

    语法

    Router::METHOD('/url', callback);
    

    示例

    匿名函数

    Router::GET('/test', function(){
      //some code here
      return "This is test."
    });
    
    Router::POST('/test', function(){
     //some code here
     return "This is test."
    });
    

    控制器函数

    Router::GET('/login', [LoginController::class, 'index']);
    
    Router::POST('/login', [LoginController::class, 'login']);
    
  • 控制器

    • controllers 目录中编写控制器。
    • YourController 必须扩展 Controller
    • 控制器必须包含属性:public array $params[]
    • 此数组属性的成员/元素可以在相应的视图中作为单独的变量访问。
    • 示例。
      $this->params['message'] = "This is message";  //in controller
      
      <p>
         <?php echo $message;?> // in view
      </p> 
      
      $this->params['user']['id'] = 5;  //in controller
      $this->params['user']['name'] = "foo";  
      $this->params['user']['email'] = "bar"; 
      
      <p>
      <?php echo $user['id'];?> // in view
      <?php echo $user['name'];?> 
      <?php echo $user['email'];?> 
      </p> 
      
  • 模型

    • models 目录中编写数据模型。
    • YourModel 必须扩展 Model
    • YourModel 必须实现方法
      • tableName( ). 返回(字符串)表名。
      • primaryKey( ). 返回(字符串)主键字段名。
      • fields( ). 返回(字符串数组)包含除主键之外的所有字段名称。
  • 视图

    • 可以通过控制器通过以下方式渲染视图
       return View::make('home', $this->params);
      
    • views 目录中编写视图。
    • Views 必须通过以下方式声明文档标题
      //inside view
      <?php
      /** @var  $this momik\simplemvc\core\View */
      $this->title = "Document title";
      ?>
      
  • 布局

    • 您可以有多个布局。
    • views/layouts 中编写布局。
    • 通过相应的控制器设置布局
      $this->setLayout('layoutName');
      
  • 会话

    • 会话变得简单。
    • 设置、获取、取消会话
      SESSION::set('key', 'value'); //setting session
      SESSION::get('key); //accessing set session
      SESSION::remove('key); //accessing set session
      
    • 设置和获取会话闪存
      SESSION::setFlash('key', 'value'); //setting session flash 
      SESSION::getFlash('key); //getting session flash msg
      
  • 表单验证

    • 访问预定义的验证。(研究 core/Validation.php 以获取所有可用的验证。)
    • 示例
        $formFields = array(
                            "email"=>"foo@bar.com",
                             "password"=>"fooBar#123"
                           );
      
        $errors = Validation::validate($formFields)  
        //returns array string of error messages.
      
        if ( empty($errors) ) {
           echo "All ok";      
        } else {
            foreach ( $errors as $error ) {
                echo $error."<br>"
            }
        }
      
  • 表单和字段组件

    • 使用表单和字段组件创建表单。
    • 语法
      Form::open('actionUrl', 'requestMethod');
      echo Form::field('inputType', [assoc array of attribute and values], 'optionalErrorMsg');
      echo "<button type='submit'>Login</buton>";
      Form::close();
      
    • 示例
        Form::open('', "post");
        echo Form::field("email", ['name' => 'email', 'placeholder'=>'Email here'], $errors['email'] ?? '');
        echo Form::field("password", ['name' => 'password', 'placeholder'=>'Password here'], $errors['password'] ?? '');
        echo "<button type='submit' class='btn btn-md btn-primary my-2 col-12'>Login</buton>";
        Form::close();
      
  • 基本CRUD操作

    core/Model.php 包含常用的CRUD操作。
    这些操作由 models 目录中的所有 dataModels 继承。
    操作

    操作 方法 参数 描述
    创建记录 save() - 向表中插入记录。
    按ID读取单个记录 fetch($id) $id 根据主键获取记录。
    按XYZ读取单个记录 findOne($where) $where $where 是一个关联数组。获取满足多个 WHERE 条件的记录。
    更新记录 update($id) $id 根据id更新单个记录。
    删除记录 delete($id) $id 根据id删除单个记录。

常见问题解答

1. $request->getMethod()的作用是什么?

返回HTTP请求方法。返回get、post、put等。

2. $request->getBody()的作用是什么?

返回HTTP请求内容的关联数组。主要用于获取表单中的POST数据。

3. $object->findOne($assocArray)的作用是什么?

从相应的表中返回与关联数组的键和值匹配的字段和值的相关关联数组。

4. $object->initializeProperty($assocArray)的作用是什么?

返回void。关联数组的键初始化为对象的属性,关联数组的值设置为相应的属性值。