php/oop/mvc 使用 markdown 文件的操作顺序(无 db)

Posted

技术标签:

【中文标题】php/oop/mvc 使用 markdown 文件的操作顺序(无 db)【英文标题】:php/oop/mvc order of operation with markdown files (no db) 【发布时间】:2018-05-31 08:01:07 【问题描述】:

目标:了解这个实现的操作顺序/逻辑是否确实属于MVCC部分>.

情况:我几乎完成了一个带有降价文件的简单笔记网站。除身份验证外,不使用任何数据库。但是,由于缺少数据库,因此很难知道我是否忽略了 MVC 的 M

因为我不想将 .md 扩展作为漂亮 url 的一部分,所以我严重依赖 PageController 来确定操作顺序。

PageController 从 Controller 继承构造的文件系统/Flysystem(fs)、twig 和处理这三个场景中的任何一个的“$app”。

它首先检查param.md 是否存在,然后检查param 是否是一个目录。如果以上都不是,那么它是一个新的笔记。在每种情况下,它都使用由应用程序 ($app) 设置的相应方法,该方法处理并返回一个数组(标题、面包屑、内容/目录列表、新模板等)。

<?php 
namespace App\Controller;
class PageController extends Controller 

public function Page($param)
  $file=$param.'.md';
  if ($this->fs->has($file)) 
    $data=$this->app->setNote($file);
    return $this->app->render('note.twig',$data)
  
  elseif ($this->fs->has($param)) 
    $data=$this->app->setFolder($param);
    return $this->app->render('folder.twig',$data)
  
  else 
    $data=$this->app->setNew($param);
    return $this->app->render('new.twig',$data)
     
 

每"PHP the Right Way":

控制器处理请求,处理从模型返回的数据并加载视图以在响应中发送。

虽然我的代码工作并完成了工作,但它似乎不是正确的方式,因为主应用程序正在处理。我想我可以将 Application.php 移动到 Models 文件夹中,但这会使其坚持“正确的方式”吗?我应该在 PageController 开始工作之前使用中间件吗?

询问一个可以正常工作的代码似乎很愚蠢,但我的目标是在处理平面文件时更好地理解/学习当前智慧的方式。

【问题讨论】:

快速旁注:我没有使用任何(微)框架来强迫自己理解每个 php cogs。 【参考方案1】:

无论您是否“无数据库”,数据都在.md 文件中存储/访问。

对它们的访问应抽象为模型。您应该创建一个 File.find 对象 + 方法和/或 File.find_or_create。那么

$file = File.find_or_create($param);
$render_type = $file.type . '.twig';
return $this->app->render($render_type, $file.data);

将所有 if 逻辑放入模型中。

【讨论】:

以上是关于php/oop/mvc 使用 markdown 文件的操作顺序(无 db)的主要内容,如果未能解决你的问题,请参考以下文章

基于VSCode的Markdown博文编写与发布方案

Markdown简明教程

Markdown简明教程

博文分类

WMD markdown 编辑器 - HTML 到 Markdown 的转换

01markdown语法