所以,几周以来我一直在玩我自己的PHP MVC框架,纯粹是为了学习目的.我已经完成了基础知识,我想我知道在哪里,等等.但到目前为止,我还没有弄清楚以下内容.
假设我有一个音乐数据库,我有一个“音乐控制器”,一个“音乐模型”,显然是一个“音乐视图”.我最终想要做的是,能够当然插入新的艺术家和/或新的曲目,我也希望能够编辑它们,等等.我的网址看起来像这样:
example.com/controller/mainfunction
在我的“音乐控制器”中,我有一个方法如下:
public function addTrack()
{
if (isset($_POST["submit_add_track"]))
{
// call the model to add track to database etc..
}
}
所以,如果我在我的“音乐视图”中有一个表单并提交,我可以在数据库中添加一个新的轨道.我还有一种添加新艺术家的方法,等等.
但这就是我正在努力的方向.我该如何设计呢?我应该使用音乐控制器添加曲目和艺术家吗?像这样:
example.com/music/add/artist
example.com/music/add/track
或者我应该采用不同的方式,也许我应该使用“音乐控制器”来显示艺术家和曲目,并插入其他控制器的东西?像这样:
example.com/insert/artist
example.com/insert/track
后者似乎是适合我的方式,但我不确定这是否是好的设计.
我想也许我要问的是,使用“插入”控制器,然后使用“跟踪方法”在视图中显示“插入轨道”表单会不会很好?接下来,将会有更多的页面,而不仅仅是音乐.但我无法弄清楚这背后的逻辑如何正确地做到这一点,所以我可以轻松扩展.
正如你所看到的,我迷失了,任何指针(大或小)都会对我有所帮助.提前致谢!!
编辑:
所以,看看我现在是否走在正确的轨道上.我有一个音乐控制器,下面粘贴了代码.如果在控制器中调用“addArtist”方法,它将进入模型,将艺术家添加到数据库,向控制器返回一些内容,并完成.现在我还有麻烦的部分.如何显示表单以实际添加艺术家?我知道它应该在视野中.但是我应该怎么称呼它?像这样的东西?
example.com/music/insertArtist
这可能有效,但是我会有一个“insertArtist”方法,用于显示表单和“addArtist”方法,用于在每次提交表单时将新艺术家实际插入数据库.我知道我错过了一些东西,但我还是无法解决这个问题.我在想的是,在“addArtist”方法中,我包含要显示的“addArtist”视图文件,其中包含表单,我输入了一些“如果提交然后添加艺术家”.这是否有意义,如果是这样,我是否走错了路?
public function addArtist()
{
// $artist_model->addArtist();
}
public function editArtist($artistID)
{
// $artist_model->editArtist();
}
public function deleteArtist($artistID)
{
// $artist_model->deleteArtist();
}
public function addTrack()
{
// $artist_model->addTrack();
}
public function editTrack($trackID)
{
// $artist_model->addTrack();
}
public function deleteTrack($trackID)
{
// $artist_model->addTrack();
}
解决方法:
example.com/music/addArtist
example.com/music/addTrack
您必须严格遵循/ controller /方法的格式
当我说方法时,我的意思是字面意思,方法.实际上,在您的基本控制器类中,您应该调用方法的方式是
/**
* Executes the requested action
*/
public function ExecuteMethod($method)
{
$this->{$method}();
}
您可以将addArtist或addTrack传递给方法.
基本上,/ controller / part只是告诉apache要构造哪个实际的控制器类,而/ method /告诉它该控制器中的哪个方法要执行.
编辑:
This是我所知道的最好的MVC教程.我的MVC知识主要基于此.但是,只要不更改MVC的核心值使其变得如此强大,就可以稍微改变标准MVC结构以更好地满足您的需求.
编辑2 :(回复你的编辑)
所以你问它如何查看表单.
查看表单和提交表单是两个完全不同的操作,应该这样对待.此外,每个控制器动作,必须有自己的视图.
一个简单的方法,每当用户需要来自服务器的任何数据(或操作)时,你必须有一个动作和一个视图.
这意味着,你的控制器中有两个独立的方法,viewForm()和submitForm().现在,你在控制器类中显示的内容,你有addArtist(),editArtist()等,效率很低,因为你只是将它们别名化为相应的模型函数,这类函数会跳过MVC的整个点.
我无法确切地告诉你如何实现控制器,因为我不确切知道你的目标是什么.但是我们假设您有一个列出所有艺术家的页面,并且每个动作旁边都有按钮(顺便说一句,正如我在评论中所说,在这样的实现中,如果您在不同的地方展示艺术家和曲目页面,他们应该有单独的控制器).在此实现中,您将拥有一个控制器 – >查看此设置:
> /艺术家/观点 – >返回带按钮的艺术家html列表
> / Artists / viewAddForm – >返回一个用于创建新艺术家的空白表单
> /艺术家/ submitAdd – >返回一个html确认页面
> / Artists / viewEditForm – >返回一个表单,以便使用预填充值进行编辑
> /艺术家/ submitAdd – >返回一个html确认页面
> /艺术家/删除 – >返回一个html确认页面
因此向用户呈现艺术家列表.他们有3个选择.
>他们点击添加,填写表格,提交,然后转到确认页面.
>他们点击编辑,编辑表格,提交表格,然后转到确认页面.
>他们点击删除,他们直接进入确认页面,因为没有数据要填写.
轨道的结构将完全相同.
标签:php,url-routing
来源: https://codeday.me/bug/20190624/1277769.html