我只是掌握了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) 我刚发布这个问题,所以你们中的一些人可能会以正确的方式指出我.我正在慢慢升温到OOP,开始理解这个概念.我想建立一个良好的核心或基础,用作CMS后端.它也将使用MVC.我一直在使用http://gilbitron.github.com/PIP/作为MVC基础.
我无法弄清楚的事情如下:
比如说,在后端的项目页面上我有两个部分:htmltext和项目,我应该能够编辑它们.uri将类似于:// domain/backend/projects(该方法将是索引并显示2个部分)
当我点击项目时应该如何处理?// domain/backend/projects/projects /或// domain/backend/projects/list /
更进一步,项目将保存一些图像或图库://域/后端/项目/编辑/ 5 /图库/ 2
我的问题是,首先:这是一个很好的方法,更重要的是如何在OOP中实现
主要项目控制人:
class projects {
function index(){
// view index
}
function edit{
$project = new Project();
$projectdata = $project->load(5);
}
}
Run Code Online (Sandbox Code Playgroud)
单个项目控制器
class project {
function __construct(){
$this->projectmodel = $this->loadModel('project_model'); // prepare the model to be used
}
function load($id){
$this->projectmodel->loadproject($id);
}
}
Run Code Online (Sandbox Code Playgroud)
项目模型
class project_model extends model { //extends for DB access and such
function __construct(){
// do stuff
}
function loadproject($id){
return …Run Code Online (Sandbox Code Playgroud)