我只是掌握了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)
我的模型往往是映射到数据库表的实体类.
模型对象是否应具有所有数据库映射属性以及上面的代码,或者可以将实际上数据库工作的代码分开吗?
我最终会有四层吗?
第一个问题
请问,您能解释一下在MVC中如何实现最简单的ACL.
这是在Controller中使用Acl的第一种方法......
<?php
class MyController extends Controller {
public function myMethod() {
//It is just abstract code
$acl = new Acl();
$acl->setController('MyController');
$acl->setMethod('myMethod');
$acl->getRole();
if (!$acl->allowed()) die("You're not allowed to do it!");
...
}
}
?>
Run Code Online (Sandbox Code Playgroud)
这是一个非常糟糕的方法,它的缺点是我们必须将Acl代码添加到每个控制器的方法中,但我们不需要任何其他依赖项!
接下来的方法是制作所有控制器的方法private并将ACL代码添加到控制器的__call方法中.
<?php
class MyController extends Controller {
private function myMethod() {
...
}
public function __call($name, $params) {
//It is just abstract code
$acl = new Acl();
$acl->setController(__CLASS__);
$acl->setMethod($name);
$acl->getRole();
if (!$acl->allowed()) die("You're not allowed to do it!"); …Run Code Online (Sandbox Code Playgroud) 我需要更有经验的程序员的帮助.我想提高我的MVC技能.但我找不到关于Google for MVC的好教程.谷歌总是给"初学者MVC".
我理解MVC是什么,我可以做到,但我没有经验足以在OOP中做一些实用的事情.
如果有人知道一个好的面向对象的MVC教程,请指引我到正确的地方 - 我正在寻找好的链接,书籍等.
最近几天,我在PHP中广泛阅读有关OOP和MVC的书籍和网页,这样我就可以成为更好的程序员.我对MVC的理解遇到了一些问题:
我在哪里放一个mysql_query?
我应该将它放在控制器中并在基于提供的查询返回数据的模型上调用方法吗?或者我应该把它放在模型本身?这两种选择我都提供完全垃圾吗?
我想在PHP中实现日志机制到文件:
例如:
Class A {
public function f_A {
log_to_file($message);
}
}
Class B {
public function f_B {
log_to_file($message);
}
}
Run Code Online (Sandbox Code Playgroud)
我将非常感谢任何提示.我想实现一些简单而优雅的解决方案.
我正在考虑它(谢谢你的答案),我想我会这样做(也许,有一些错误,我是从头开始编写的):
interface Logger {
public function log_message($message);
}
class LoggerFile implements Logger {
private $log_file;
public function __construct($log_file) {
$this->log_file = $log_file;
}
public function log_message($message) {
if (is_string($message)) {
file_put_contents($this->log_file, date("Y-m-d H:i:s")." ".$message."\n", FILE_APPEND);
}
}
}
//maybe in the future logging into database
class LoggerDb implements Logger {
private $db;
public function __construct($db) …Run Code Online (Sandbox Code Playgroud)