我正在努力学习OOP.我正在阅读的书中所谓的"现实世界"例子并没有帮助.
所有的例子一样Pet,Car,Human不能帮助我了.我需要真实的生活例子,如注册,用户个人资料页面等.
一个例子:
$user->userName = $_POST['userName'];//save username
$user->password = $_POST['password'];//save password
$user->saveUser();//insert in database
Run Code Online (Sandbox Code Playgroud)
我也看到了:
$user->user = (array) $_POST;
Run Code Online (Sandbox Code Playgroud)
其中:
private $user = array();
Run Code Online (Sandbox Code Playgroud)
保存数组中的所有信息.
在同一个班级里面
$user->getUser($uid);
// which sets the $this->user array equal to mysqli_fetch_assoc() using
//the user id.
Run Code Online (Sandbox Code Playgroud)
有没有在许多不同的php应用程序(注册,登录,用户帐户等)中实现OOP的真实世界示例?
我一直在阅读很多关于如何以及为什么在应用程序中使用MVC方法的内容.我已经看到并理解了一个模型的例子,我已经看到并理解了View的例子....但我仍然在控制器上有点模糊.我真的很想看到一个完整的控制器示例.(如果可能,使用PHP,但任何语言都会有帮助)
谢谢.
PS:如果我能看到一个index.php页面的例子,它会决定使用哪个控制器以及如何使用它.
编辑:我知道控制器的工作是什么,我只是不知道如何在OOP中实现这一点.
我编写的很多应用程序都使用了查找表,因为这就是我教授的方式(规范化等).问题是由于这个原因,我所做的查询通常更复杂.它们通常看起来像这样
获取所有仍处于打开状态的帖子
"SELECT * FROM posts WHERE status_id = (SELECT id FROM statuses WHERE name = 'open')"
Run Code Online (Sandbox Code Playgroud)
通常,查找表本身非常短.例如,可能只有3种左右的不同状态.在这种情况下,是否可以通过在应用程序中使用常量来搜索某种类型?就像是
获取所有仍处于打开状态的帖子
"SELECT * FROM posts WHERE status_id = ".Status::OPEN
Run Code Online (Sandbox Code Playgroud)
或者,如果不是使用外来ID,我将其设置为枚举并查询它?
谢谢.
我希望能够在我的网站上收到通知,类似于SO的方式.我已经找到了一个很好的表结构来做到这一点,但我似乎无法弄明白.
我在想这样的事情.
通知
id,notification_type_id,user_id,type_id
通知类型
id, notification_text
如果通知类型与新帖子,新评论或我稍后添加的任何功能相关...用户ID将与通知所针对的人有关.Type_id和通知类型将齐头并进,因此如果notification_type是新注释,则type_id将是要转到的comment_id.
这对我来说似乎很好,但我希望能够在发生变化时通知所有用户..就像在Facebook上发表评论时,你会得到一个通知,其他人也在你之后评论了同样的事情.
我似乎无法弄明白......帮助想要
谢谢
编辑:我想到的方式是,notification_type_id将映射到notification_type表,该表将保存每个通知的文本("你有一个新的评论","等等等等等等也评论等等等等"等等) .),type_id将映射到注释所关注的primary_id.例如,如果通知说你的帖子有新的评论,那么type_id将是帖子的主要ID,以便于链接.. IDK,这只是一个想法.
我有一个jQuery脚本,它创建一个轮播来在用户点击时左右旋转图像.起初,我并没有计划在一个页面上放置多个旋转木马,但现在已经到了需要.
问题是,当用户点击按钮时,我不知道如何引用一个轮播(单击一个).
继承剧本
$(function()
{
// Put last item before first item, in case user clicks left
$('.carousel li:first').before($('.carousel li:last'));
// Right click handler
$('.right-button img').click(function()
{
// Get width plus margins
var item_width = $('.carousel li').outerWidth() + (2 * parseInt($('.carousel li').css('margin-right')));
// Get left indent
var orig_left_indent = $('.carousel').css('left');
// Calculate new left indent
var left_indent = parseInt(orig_left_indent) - item_width;
$('.carousel:not(:animated)').animate({'left': left_indent}, 500, 'swing', function()
{
// Put first item after last item
$('.carousel li:last').after($('.carousel li:first'));
// Set left …Run Code Online (Sandbox Code Playgroud) 我希望有一个通用配置,其设置不会在不同的环境(开发和生产)中发生变化.我知道我可以设置一个全局的settings.py文件(例如,sql限制),但据我所知,金字塔需要在启动时在ini文件中找到某些设置(例如,模板目录路径).
我可以,如果是这样,我如何在金字塔中做到这一点?
我通过浏览和研究现有框架来了解MVC框架的工作原理.似乎我看到的每个框架都有一个布局,每个控制器中的每个方法都有自己的模板文件.所以会有一个登录模板,一个注销模板,一个寄存器,等等.
我的问题是,如何以及为什么要在一个文件中为整个页面创建模板.假设您想在多个页面上显示登录表单,是否需要为要在其上显示的每个模板创建登录表单?这不违反不重复自己的规则(DRY)吗?
到目前为止,我一直在做的事情是,我一直在创建liitle模板块,然后将它们组合起来创建每个页面.所以不要做这样的事情,
$title = 'Blah Blah Blah';
$user = 'Jon Miller';
include 'index.phtml';
<html>
<head>
<title><?php echo $title; ?></title>
</head>
<body>
<h3><?php echo $user; ?></h3>
<form>login form</form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我一直这样做
$title = 'Blah Blah Blah';
include 'header.phtml';
$user = 'Jon Miller';
include 'user.phtml';
include 'login_form.phtml';
include 'footer.phtml';
header.phtml
<html>
<head>
<title><?php echo $title; ?></title>
</head>
<body>
user.phtml
<h3><?php echo $user; ?></h3>
login_form.phtml
<form>login form</form>
footer.phtml
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
总而言之,我只想知道正确的方法,以及如何以及为什么......这似乎违反了DRY规则.
谢谢
现在我的问题是,如果我有一个调查问题表,一个调查选择表和一个用户对这些调查问题的答案表,我将如何在同一查询中选择调查问题以及该调查的所有选项?
问题表
question_id (int)
question (text)
Run Code Online (Sandbox Code Playgroud)
选择表
choice_id (int)
question_id (int)
choice_text (varchar)
Run Code Online (Sandbox Code Playgroud)
答案表
answer_id (int)
question_id (int)
choice_id (int)
Run Code Online (Sandbox Code Playgroud)
我应该做什么SELECT才能在同一个查询中获得调查问题以及该调查的所有选择(已知或未知数量)?(如果可能的话,也可以在同一个查询中找到我的其他问题中的数学运算)
我不是那么先进的MySQL.
谢谢
编辑: 对不起,我的意思是,我正在尝试获取一个SELECT语句来选择问题,以及与该问题相对应的所有选项,在一行中.
如果我做的事情
SELECT question_id, question, choice_id, choice_text FROM questions LEFT JOIN choices USING(question_id)
Run Code Online (Sandbox Code Playgroud)
我得到多行,每个choice_id一行.
结果应该是这样的
question choice_1 choice_2 choice_3
A or B or C A B C
Run Code Online (Sandbox Code Playgroud)
数学部分将结果统计到调查中,是的,如果有帮助,choice_id是PK.
什么是组织控制器的最佳方式.假设我有一个用户控制器和一个注册操作,我是否应该在我验证和处理数据的过程中执行process_registration操作,或者只是在注册操作本身内执行所有处理.我是否应对每个需要它的操作进行验证/处理操作(注册,进程注册等等)
我还注意到很多人都有模块和控制器,仅用于验证和处理信息,(我想将所有验证逻辑和规则保存在一个位置?)
我想我的问题是,事情需要分开多远?这个问题也适用于模型和视图.
我有芹菜配置
BROKER_URL = 'redis://127.0.0.1:6379'
CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379'
Run Code Online (Sandbox Code Playgroud)
然而每当我运行celeryd时,我都会收到此错误
consumer: Cannot connect to amqp://guest@127.0.0.1:5672//: [Errno 111] Connection refused. Trying again in 2.00 seconds...
Run Code Online (Sandbox Code Playgroud)
为什么它没有连接到我设置的redis代理,运行btw?