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 【问题描述】:目标:了解这个实现的操作顺序/逻辑是否确实属于MVC的C部分>.
情况:我几乎完成了一个带有降价文件的简单笔记网站。除身份验证外,不使用任何数据库。但是,由于缺少数据库,因此很难知道我是否忽略了 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)的主要内容,如果未能解决你的问题,请参考以下文章