【问题标题】:php/oop/mvc order of operation with markdown files (no db)php/oop/mvc 使用 markdown 文件的操作顺序(无 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。

标签: php oop model-view-controller flat-file


【解决方案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 逻辑放入模型中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-12
    • 1970-01-01
    • 2013-08-05
    • 2018-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-15
    相关资源
    最近更新 更多