momik / simple-mvc
此包已被废弃且不再维护。未建议替代包。
此包最新版本(v1.5-stable)无可用许可证信息。
v1.5-stable
2022-09-29 05:40 UTC
Requires
- vlucas/phpdotenv: ^5.4
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
安装
-
使用
composer create-project momik/simplemvc example-app
-
导航到 ' public '
cd example-app cd public
-
在端口8080上运行应用
php -S localhost:8080
入门
-
数据库
编辑.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。关联数组的键初始化为对象的属性,关联数组的值设置为相应的属性值。