像大多数Web开发人员一样,我非常享受固态MVC架构对Web应用程序和站点的好处.使用PHP进行MVC时,自动加载显然非常方便.
我已成为spl_autoload_register过度简单定义单个__autoload()函数的粉丝,因为如果要合并每个使用自己的自动加载的不同基本模块,这显然会更灵活.但是,我从来没有对我写的加载函数感到满意.它们涉及大量字符串检查和目录扫描,以便查找可能加载的类.
举例来说,假设我有一个具有被定义为基本路径的应用程序PATH_APP和一个简单的结构,命名的目录models,views和controllers.我经常使用命名结构来命名文件IndexView.php并IndexController.php在相应的目录中,默认情况下模型通常没有特定的方案.我可能有一个这样的结构的加载器函数,注册时spl_autoload_register:
public function MVCLoader($class)
{
if (file_exists(PATH_APP.'/models/'.$class.'.php')) {
require_once(PATH_APP.'/models/'.$class.'.php');
return true;
}
else if (strpos($class,'View') !== false) {
if (file_exists(PATH_APP.'/views/'.$class.'.php')) {
require_once(PATH_APP.'/views/'.$class.'.php');
return true;
}
}
else if (strpos($class,'Controller') !== false) {
if (file_exists(PATH_APP.'/controllers/'.$class.'.php')) {
require_once(PATH_APP.'/controllers/'.$class.'.php');
return true;
}
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
如果之后没有找到它,我可能有另一个函数来扫描models目录中的子目录.但是,所有if/else-ing,字符串检查和目录扫描对我来说似乎效率低下,我想改进它.
我很好奇其他开发人员可能采用的文件命名和自动加载策略.我正在寻找专门用于高效自动加载的良好技术,而不是自动加载的替代方案.
我的调试值设置为2,它显示所有查询,除了我需要的查询.
我有一个Items控制器方法,在User模型中调用此方法(Item belongsTo User):
function add_basic($email, $password) {
$this->create();
$this->set(array(
'email' => $email,
'password' => $password
));
if($this->save()) {
return $this->id;
}
else {
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
我已经确认$email并且$password正在正确地传递给函数(并且填充了合法数据).email并且password是User模型中字段的名称.
我还确认$this->save()它正在返回false,但是当我查看发生这种情况的页面时,查询没有在调试中打印,并且没有抛出错误,所以我不知道什么是错误的.
关于如何查看错误或者为什么查询似乎没有被执行的任何想法?
这很奇怪,因为在此之后,我有另一个模型以完全相同的方式保存数据,它顺利出现.
我有一个方法创建一个包含Error对象的HttpResponseMessage,该对象将根据当前请求媒体类型格式化程序返回.
目前,我已经对XmlMediaTypeFormatter进行了硬编码,但我希望能够在运行时找到当前请求MediaTypeFormatter,但由于我的下面代码存在于单独的类库中,因此我无法访问当前请求对象.
private HttpResponseMessage Create(HttpStatusCode statusCode, string errorCode, string errorMessage)
{
var result = new HttpResponseMessage(statusCode)
{
Content = new ObjectContent<Error>(new Error()
{
Code = errorCode,
Message = errorMessage
}, new XmlMediaTypeFormatter())
};
return result;
}
Run Code Online (Sandbox Code Playgroud)
如何全局访问当前的HttpRequestMessage对象?像HttpContext.Current.Request之类的东西
如果不可能,如何实现上述方法,以便它知道它应该用于当前请求的格式器?
我很想知道是否为ASP.NET MVC编写了任何基本的CMS代码.
我问的原因是,我正在为客户创建一个数据驱动的网站,我已经花了很多时间从MVC开始构建它,但现在客户想要内容管理设施.
基本上他们希望能够添加/编辑/删除文章并具有版本控制.
如果我能够以某种方式"关注"内容管理而不必从头开始,在现有的CMS 下开发它,那将是很棒的.
我应该自己构建文章管理和修订控制,还是应该重新使用一些现有的包?
我是MVC的新手.据我所知:
业务逻辑在哪里?
获取大型企业应用程序:
MVC Web应用程序在此基础上(在代码和项目结构方面)的适当方式是什么?
我已经看到模型文件夹中的所有内容的示例似乎不适合非常大的应用程序.
谢谢你的建议!
我在我的视图页面上写了以下代码;
@Html.CheckBox("ChxName",true)
Run Code Online (Sandbox Code Playgroud)
我得到了以下结果;
<input checked="checked" id="ChxName" name="ChxName" type="checkbox" value="true" />
<input name="ChxName" type="hidden" value="false" />
Run Code Online (Sandbox Code Playgroud)
为什么有一个与复选框命名相同的输入元素?
我正在学习Java和OOPS,在eclipse中编写一个基本的Hello World时,我看到一个黄色三角形告诉我"实用程序类不应该有公共或默认构造函数".我无法理解为什么会发生这种情况,这是什么意思?我做得怎么样?
class HelloWorld {
public static void main(String[] args)
{
// TODO Auto-generated method stub
System.out.println("Hola Mundo!");
}
}
Run Code Online (Sandbox Code Playgroud)
EDIT1:编辑代码以包含建议的更改.
final class HelloWorld {
private HelloWorld()
{
throw new AssertionError("Instantiating utility class...");
}
public static void main(String[] args)
{
// TODO Auto-generated method stub
System.out.println("Hola Mundo!");
}
}
Run Code Online (Sandbox Code Playgroud)
仍在线上HelloWorld的警报.
EDIT2:
创建了一个新类,现在它可以工作了.谢谢Jon.为什么旧班仍然会发出警告?波希米亚人我还没有意识到你在帖子中提到的概念.一旦我有了更好的主意,我会回到他们身边.谢谢你解释一下.
我根据专业ASP.NET 3.5 MVC的第13章,由Scott Hanselmen,Phil Haack和Rob Conery将一个ASP.net 4 webform项目转换为Asp.net MVC4,由Wiley Publishing,Inc.出版(ISBN:978-) 0-470-38461-9).我也关注了这个博客.现在我可以添加控制器,视图等.所有引用都设置正确.没有构建错误.但是在启动转换后的项目时,我遇到了编译错误.我在同一台机器上安装了mvc3.我甚至改变了对它的引用.它仍然抱怨.你能帮忙吗?谢谢.
Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately.
Compiler Error Message: CS0234: The type or namespace name 'Mvc' does not exist in the namespace 'System.Web' (are you missing an assembly reference?)
Source Error:
Line 109: <namespaces>
Line 110: <add namespace="System.Web.Helpers"/>
Line 111: <add namespace="System.Web.Mvc"/>
Line 112: <add …Run Code Online (Sandbox Code Playgroud) 我是Ruby on Rails的新手,我已经完成了博客教程.
我现在正在尝试向控制器添加一个名为"start"的附加操作.
def start
end
Run Code Online (Sandbox Code Playgroud)
我添加了一个视图页面"app/views/posts/start.html.erb",只包含简单的html.
当我去/ posts/start时,我得到以下错误.
ActiveRecord::RecordNotFound in PostsController#show
Couldn't find Post with ID=start
Run Code Online (Sandbox Code Playgroud)
我理解错误,正在执行show动作并且start不是有效的ID.为什么启动操作没有执行,是否存在我缺少的MVC架构或配置的某些部分?
下面是我的posts_controller.rb
class PostsController < ApplicationController
# GET /posts/start
def start
end
# GET /posts
# GET /posts.xml
def index
@posts = Post.find(:all)
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @posts }
end
end
# GET /posts/1
# GET /posts/1.xml
def show
@post = Post.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.xml { render :xml => …Run Code Online (Sandbox Code Playgroud) 我一直在寻找有关如何在我的html.dropdownlist上添加HTML类标记的答案.这是代码
<%: Html.DropDownList("PackageId", new SelectList(ViewData["Packages"] as IEnumerable, "PackageId", "Name", Model.PackageId))%>
Run Code Online (Sandbox Code Playgroud)
我想在select元素下添加选项类,以便我可以使用这个链式选择:
<select id="category">
<option value="1">One</option>
<option value="2">Two</option>
</select>
<select id="package">
<option value="1" class="1">One - package1</option>
<option value="2" class="1">One - package2</option>
<option value="3" class="2">Two - package1</option>
<option value="4" class="2">Two - package2</option>
</select>
$("#series").chained("#mark");
Run Code Online (Sandbox Code Playgroud) asp.net-mvc ×6
architecture ×1
c# ×1
cakephp ×1
checkbox ×1
html ×1
html-select ×1
java ×1
php ×1
razor ×1
ruby ×1