第一个问题
请问,您能解释一下在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) 作为一个大多数自学成才的程序员,我在设计模式等方面已经迟到了.我正在使用CodeIgniter编写一个劳动管理Web应用程序.
我在学校做了一些MVC ASP.NET/C#和Java,并且惯例是你的模型主要由代表实际对象的类组成,但也抽象了所有的数据库连接等......这是非常标准的MVC东西从我收集到的.
我想我说对,CI完全看不到数据库连接(除非你去看),这对于课程来说是标准的,你可以创建的模型可以将'通用'CRUD方法抽象得更多创建一些对特定模型更有用的方法.
我遇到问题,因为它与我习惯使用MVC的不同之处在于,每当你说...从数据库返回一行时,惯例就是将它放在一个关联数组或标准对象中使用表示行中数据的属性.
在ASP中,您可以构建实际的类来存储此信息.比如你有一个House类和数据将被存储为属性(例如bedrooms,bathrooms,address)和方法将是有用的东西,你可以对数据进行修改(如printInfo()可能print("$address has $bedrooms bedrooms and $bathrooms bathrooms!')).
我得到的印象 - 仅仅来自我在互联网上看到的代码 - 这不是标准的做事方式.你应该只使用数组或通用对象,并说...做$this->house_model->print_info($houseobject)而不是$houseobject->print_info();?
谢谢.
我需要使用PHP开发一个小型CMS,现在我正试图弄清楚结构.
CMS将使用一组函数生成.像数据库函数,缓存,国际化和类似的东西.
我当时想这样做:
使函数非静态方法成为大型"站点"类的一部分; 这样我可以运行该类的多个实例.不确定我是否需要这样做..
或者使用静态方法将函数拆分为单独的类
这里的主要问题是CMS应该能够管理多个小站点,而不仅仅是一个.所以要么我将所有方法都设置为静态并添加"站点切换"功能,要么使它们成为我根据我想要管理的站点实例化的普通对象
哪一个是最好的选择?