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

问题描述 投票:2回答:1

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

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

因为我不想将.md扩展名作为漂亮网址的一部分,所以我非常依赖于PageController来解决操作顺序问题。

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

它首先检查是否存在param.md,然后检查param是否是目录。如果不是上述内容,那么这是一个新笔记。在每种情况下,它使用由Application($ 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"

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

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

询问一个可行的代码似乎很愚蠢,但我的目标是在处理平面文件时更好地理解/了解当前智慧的方法。

php oop model-view-controller flat-file
1个回答
-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逻辑放在Model中。

© www.soinside.com 2019 - 2024. All rights reserved.