相关疑难解决方法(0)

如何在Web MVC应用程序中实现访问控制列表?

第一个问题

请问,您能解释一下在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)

php oop model-view-controller acl

94
推荐指数
3
解决办法
3万
查看次数

脂肪模型和瘦小的控制器听起来像创造神模型

我一直在阅读很多博客,主张胖模型和瘦控制器方法,尤其是.Rails阵营.因此,路由器基本上只是找出在什么控制器上调用什么方法,并且所有控制器方法都在调用模型上的相应方法然后调出视图.所以我在这里有两个我不明白的问题:

  1. 控制器和路由器实际上没有做太多不同的任务,只是根据路线调用类似神的模型上的方法.
  2. 模特做得太多了.发送电子邮件,创建关系,删除和修改其他模型,排队任务等.现在基本上你有类似神的对象,应该做任何与建模和处理数据有关或可能不关心的事情.

你在哪里划线?这不仅仅是落入神模式吗?

architecture model-view-controller design-patterns god-object

87
推荐指数
2
解决办法
3万
查看次数

模型和实体之间有什么区别

我很难理解这个词的含义是什么:

Entity,Model,DataModel,ViewModel

任何人都可以帮我理解他们吗?谢谢你们.

entity entity-framework model datamodel viewmodel

50
推荐指数
4
解决办法
3万
查看次数

架构比MVC更适合Web应用程序?

我一直在为我的新工作学习Zend及其MVC应用程序结构,并发现使用它只是困扰我,原因是我无法完全理解.然后在学习过程中,我遇到了一些文章,如MVC:No Silver Bullet以及关于MVC和Web应用程序主题的播客.播客中的那个人对MVC作为一个Web应用程序架构提出了非常好的理由,并且扼杀了许多让我烦恼的东西.

但问题仍然存在,如果MVC不适合Web应用程序,那么它是什么?

php architecture model-view-controller web-applications

48
推荐指数
2
解决办法
2万
查看次数

在MVC中处理$ _POST数据的正确方法是什么?

我的PHP系统中存在常见的MVC情况:ControllerView包含$_POST数据接收请求.现在我有三种方法来处理数据:

a)Controller唯一调用ModelModel处理$_POST数据.
b)在Controller所述转换$_POST数据成变量,并将它们传递到Model.
c)Controller$_POST数据转换为Model域对象并仅将对象传递给Model.

目前,我正在关注选项A,但我认为这是错误的,所以我在考虑使用选项C.

那么,根据MVC,处理$_POST数据的正确方法是什么?

编辑目前,我没有使用任何MVC框架.

编辑2通常,同样Controller处理来自浏览器,Web服务,离线应用程序等的请求,或者每个人都有自己的请求Controller

php model-view-controller post controller

36
推荐指数
1
解决办法
1万
查看次数

理解PHP中的MVC视图

我在阅读MVC中的Views概念时似乎存在问题,根据我所读到的,它们是在应用程序中管理表示的层,但是我一直在阅读的许多材料似乎都有所不同.来自PHP Master.com的这个问题.

View是一个具有返回一些HTML代码的函数的类,HTML的其余部分在哪里?它应该放在访问此View代码的独立.html页面中吗?

在本文中,来自php-html.net的View是一个扩展名为.php的简单HTML文件,但它们如何访问这些数据?我require()在第一个教程中看不到或类似于实例化.

php model-view-controller coding-style

32
推荐指数
2
解决办法
2万
查看次数

在Symfony2中放置业务逻辑的位置?

在阅读了很多帖子和Stack Overflow资源后,我仍然遇到一个关于"在哪里放置业务逻辑?"的着名问题.阅读StackOverflow问题博客文章,我相信我已经很好地理解了代码分离的问题.

假设我有一个Web表单,您可以在其中添加将添加到数据库的用户.此示例涉及以下概念:

  • 形成
  • 调节器
  • 实体
  • 服务
  • 知识库

如果我没有错过任何东西,你必须创建一个包含一些属性,getter,setter等的实体,以使其持久存在于db中.如果您想获取或编写该实体,您将使用entityManager和,用于"非规范"查询entityRepository(这是您可以适合"查询语言"查询的地方).

现在,您必须为所有业务逻辑定义服务(即具有"惰性"实例的PHP类); 这是放置"重"代码的地方.将服务记录到应用程序后,几乎可以在任何地方使用它,并且涉及代码重用等.

当您渲染并发布表单时,您将它与您的实体绑定(当然还有约束)并使用上面定义的所有概念将它们放在一起.

所以,"old-me"会以这种方式编写控制器的动作:

public function indexAction(Request $request)
    {
        $modified = False;
        if($request->getMethod() == 'POST'){ // submit, so have to modify data
            $em = $this->getDoctrine()->getEntityManager();
            $parameters = $request->request->get('User'); //form retriving
            $id = $parameters['id'];
            $user = $em->getRepository('SestanteUserBundle:User')->find($id);
            $form = $this->createForm(new UserType(), $user);
            $form->bindRequest($request);
            $em->flush();
            $modified = True;
        }

        $users = $this->getDoctrine()->getEntityManager()->getRepository('SestanteUserBundle:User')->findAll();
        return $this->render('SestanteUserBundle:Default:index.html.twig',array('users'=>$users));
    }
Run Code Online (Sandbox Code Playgroud)

"New-me"以这种方式重构了代码:

   public function indexAction(Request $request)
    {
        $um = $this->get('user_manager');
        $modified …
Run Code Online (Sandbox Code Playgroud)

model-view-controller symfony

24
推荐指数
1
解决办法
4685
查看次数

具有依赖性的可测试控制器

如何解析可测试控制器的依赖关系?

工作原理:URI路由到Controller,Controller可能具有执行某项任务的依赖关系.

<?php

require 'vendor/autoload.php';

/*
 * Registry
 * Singleton
 * Tight coupling
 * Testable?
 */

$request = new Example\Http\Request();

Example\Dependency\Registry::getInstance()->set('request', $request);

$controller = new Example\Controller\RegistryController();

$controller->indexAction();

/*
 * Service Locator
 *
 * Testable? Hard!
 *
 */

$request = new Example\Http\Request();

$serviceLocator = new Example\Dependency\ServiceLocator();

$serviceLocator->set('request', $request);

$controller = new Example\Controller\ServiceLocatorController($serviceLocator);

$controller->indexAction();

/*
 * Poor Man
 *
 * Testable? Yes!
 * Pain in the ass to create with many dependencies, and how do we know specifically what dependencies a controller …
Run Code Online (Sandbox Code Playgroud)

php registry dependencies design-patterns service-locator

19
推荐指数
2
解决办法
2386
查看次数

从Controller访问数据库实体

TL;博士

在一个很好的设计.是否应该在单独的业务逻辑层(在asp.net MVC模型中)处理访问数据库,或者将IQueryables或DbContext对象传递给控制器​​是否可以?

为什么?各自的优点和缺点是什么?


我正在用C#构建一个ASP.NET MVC应用程序.它使用EntityFramework作为ORM.

让我们稍微简化一下这个场景.

我有一个可爱的蓬松小猫数据库表.每只小猫都有小猫图像链接,小猫蓬松指数,小猫名称和小猫ID.这些映射到EF生成的POCO调用Kitten.我可能会在其他项目中使用此类,而不仅仅是asp.net MVC项目.

我有一个KittenController应该去取最新的蓬松小猫/Kittens.它可能包含选择小猫的一些逻辑,但不是太多的逻辑.我一直在和朋友争论如何实现这一点,我不会透露双方:)

选项1:控制器中的db:

public ActionResult Kittens() // some parameters might be here
{
   using(var db = new KittenEntities()){ // db can also be injected,
       var result = db.Kittens // this explicit query is here
                      .Where(kitten=>kitten.fluffiness > 10) 
                      .Select(kitten=>new {
                            Name=kitten.name,
                            Url=kitten.imageUrl
                      }).Take(10); 
       return Json(result,JsonRequestBehavior.AllowGet);
   }
}
Run Code Online (Sandbox Code Playgroud)

选项2:单独的模型

public class Kitten{
   public string Name {get; set; }
   public string Url {get; …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc entity-framework controller separation-of-concerns

18
推荐指数
3
解决办法
1万
查看次数

MVC:应该直接查看与模型的对话吗?

早些时候,许多开发人员认为视图不应该像大多数框架那样直接与模型通信.

然后,这个意见似乎是错误的,我找到了一些文章,这些文章说视图可以直接与模型沟通.

http://r.je/views-are-not-templates.html
http://www.tonymarston.net/php-mysql/model-view-controller.html
模型,视图,控制器混淆
以及
模型应该如何在MVC中构建?

大多数这些文章引用了维基百科,模型 - 视图 - 控制器的块,引号是:

视图查询模型以生成适当的用户界面(例如视图列出购物车的内容).视图从模型中获取自己的数据.在一些实现中,控制器可以向视图发出一般指令以呈现其自身.在其他情况下,视图会自动通知需要屏幕更新的状态(Observer)更改模型.

啊,这是来自维基百科,这样一个权威的网站,一定是对的!

但现在,当我打开MVC http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller的wiki链接时,该页面已于今年9月14日(今年)进行了编辑2013),上面的句子已经消失了.

视图的新定义是:

视图通过控制器从模型请求向用户生成输出表示所需的信息.

现在我又困惑了,新的定义说视图应该通过控制器从模型中请求数据......

视图应该直接在地球上访问模型吗?

php model-view-controller

15
推荐指数
2
解决办法
7907
查看次数