我只是掌握了MVC框架,我常常想知道模型中应该有多少代码.我倾向于有一个数据访问类,其方法如下:
public function CheckUsername($connection, $username)
{
try
{
$data = array();
$data['Username'] = $username;
//// SQL
$sql = "SELECT Username FROM" . $this->usersTableName . " WHERE Username = :Username";
//// Execute statement
return $this->ExecuteObject($connection, $sql, $data);
}
catch(Exception $e)
{
throw $e;
}
}
Run Code Online (Sandbox Code Playgroud)
我的模型往往是映射到数据库表的实体类.
模型对象是否应具有所有数据库映射属性以及上面的代码,或者可以将实际上数据库工作的代码分开吗?
我最终会有四层吗?
我有几个库[Foo和Bar]我正在开发音乐会,但在技术上仍然是独立的东西.以前我刚刚重新定义了自动加载器"Foo\\": "../Foo/src",但是现在我已经为Foo添加了一个Guzzle依赖项,Bar翻转它的盖子,因为它不是它的依赖项之一.
目录结构:
/home/user/src/
Foo/
src/
FooClient.php
composer.json
Bar/
src/
BarClient.php
composer.json
Run Code Online (Sandbox Code Playgroud)
理论自动加载声明:[在Bar/composer.json]
"require": {
"local": "../Foo/composer.json"
}
Run Code Online (Sandbox Code Playgroud)
示例代码:
require('vendor/autoload.php');
$f = new \Bar\BarClient(new \Foo\FooClient());
Run Code Online (Sandbox Code Playgroud)
如何在不设置本地Composer仓库的情况下解决此问题?我想将它们作为单独的包维护,只需要另一个包,并因此处理其他的依赖.
感谢infomaniac,我做了以下事情:
初始化git repo:
cd ~/src/Foo && git init && echo -e "vendor\ncomposer.lock" > .gitignore && git add ./ && git commit -m "Initial Commit"
Run Code Online (Sandbox Code Playgroud)
添加了作曲家配置:
"require": {
"sammitch/foo": "dev-master"
},
"repositories": [{
"type": "vcs",
"url": "/home/sammitch/src/Foo"
}],
Run Code Online (Sandbox Code Playgroud)
然后composer update!
我有一个简单登录表单的以下数据流.
用户访问控制器PHP文件.控制器包括model.php和view.php
用户提交表单,控制器将POST数据发送到模型方法,并返回结果.
用户登录,并由控制器转发到不同的视图(登录成功消息).
目前我的观点是静态HTML(没有PHP),所以这是我的问题.然后向用户传递欢迎信息的正确方法是什么,例如"Hello,Craig!"?
视图是否允许PHP片段,例如
<?php echo $username; ?>
Run Code Online (Sandbox Code Playgroud)
既然模型在控制器文件中加载之前呢?
谢谢!
编辑:更好的做法是允许视图访问特定的类方法,例如
<?php $user->getUsername(); ?>
Run Code Online (Sandbox Code Playgroud)
而不仅仅是变量?
基于其他答案,我发现了一篇非常有用的文章,您可能也会感兴趣.
http://www.nathandavison.com/posts/view/7/custom-php-mvc-tutorial-part-5-views
I\xe2\x80\x99m 在后端使用 Slim 3 PHP 创建身份验证/登录系统,在前端使用 Angular,并且 I\xe2\x80\x99m 尝试理解 \xe2\x80\x98domain 对象\xe2 \x80\x99 和 \xe2\x80\x98data mapper\xe2\x80\x99 是 MVC 结构中模型层的一部分。我\xe2\x80\x99已经阅读了很多关于诸如此类的问题的有用答案,从中我了解到模型应该由\xe2\x80\x98domain对象\xe2\x80\x99、\xe2\x80\x98data组成映射器\xe2\x80\x99 和\xe2\x80\x98services\xe2\x80\x99。
\n\n然而,我\xe2\x80\x99m 不太确定在用户能够注册并登录网站的情况下应该如何构建它。
\n\n根据我的理解,我可以拥有一个具有用户名和密码等属性的用户“域对象”。它还可以具有注册或登录等方法来表示业务逻辑。
\n\n然后我是否会有一个服务类来创建用户对象的新实例,在其中我将表单数据传递到该对象中?那么现在我的用户对象实例将设置用户名和密码值?
\n\n现在我不确定如何将此对象属性数据插入到数据库中。我是否可以使用用户对象注册方法通过传入用户名和密码作为参数来将数据插入数据库?
\n\n显然,服务应该是域对象和数据映射器交互的地方,但我不确定如果注册方法位于用户域对象中,这将如何工作。
\n\n我希望有人可以向我展示一些代码示例,说明服务类中应包含哪些内容,以及域对象和数据映射器之间的交互如何在用户注册和登录的上下文中工作。
\n\n注意我不想使用任何框架,我想尝试手动实现正确的 MVC 结构,因为我觉得我会了解更多。
\n\n到目前为止,我有这样的结构来注册用户:
\n\n我有一个带有 registerUser 方法的 AuthenticationController 来允许用户创建帐户:
\n\n class AuthenticationController\n{\n protected $authenticationService;\n\n public function __construct(AuthenticationService $authenticationService)\n {\n $this->authenticationService = $authenticationService;\n }\n\n public function registerUser($request, $response)\n {\n $this->authenticationService->registerUser($request, $response);\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n然后我有带有 registerUser 方法的 AuthenticationService 类:
\n\nclass AuthenticationService\n{\n protected $database;\n\n public …Run Code Online (Sandbox Code Playgroud)