一点背景信息:
我最近一直在看几个PHP框架,它归结为两个.Zend Framework或CodeIgniter.
我更喜欢CodeIgniter,因为它设计简单.这是非常裸露的骨头,它只是保持简单.我不喜欢的是弱模板系统.模板系统对我很重要,因为我将与另一位设计师合作.能够给他一个好的模板系统是一个很大的优点.
Zend是第二选择,因为内置了更好的模板系统.与CodeIgniter相比,Zend是一种不同的野兽.它强调"模块之间的松散耦合",但它是一个更大的框架.我不喜欢觉得我有很多东西在我从不使用的引擎盖下运行.在我看来,这是不必要的开销,所以我考虑将模板系统放入CodeIgniter:Smarty.
问题:将Smarty集成到CodeIgniter的过程有多容易/困难?从我最初的CodeIgniter文档扫描中,我可以看到框架的布局很容易理解,我预计没有问题.我想知道是否有人以前曾经使用过它,因此我知道你所经历的任何"陷阱"会使这更难以实现或不可能实现.我也想知道这是否是一件好事.CodeIgniter中的模板系统是否足以正常使用?除了Smarty之外,还有其他适用于CodeIgniter的模板模块吗?我最好使用Zend Framework吗?这个轮子是在这里发明的吗?谢谢您的帮助!
我有几页需要登录,所以链接到这些页面的所有控制器都以
$this->checkSession();
//...rest of the code
Run Code Online (Sandbox Code Playgroud)
CheckSession应验证会话是否仍然有效,否则显示消息并停止执行控制器中的其余代码:
function checkSession()
{
if (!$this->session->userdata('is_logged_in'))
{
//the session has expired!
$data['main'] = 'confirmation_message';
$data['title'] = "Session expired";
$this->load->vars($data);
$this->load->view('template');
exit();
}
}
Run Code Online (Sandbox Code Playgroud)
.我期待这些指令按顺序发生,但我只得到一个空白页面.如何确保只在加载所有视图后才执行exit()?
我有一个CodeIgniter/PHP模型,我想将一些数据插入数据库.
但是,我在"原始"SQL查询中设置了这个集合:
ON DUPLICATE KEY UPDATE duplicate=duplicate+1
Run Code Online (Sandbox Code Playgroud)
我正在使用CodeIgniter并将我之前的所有控制器内SQL查询转换为ActiveRecord.有没有办法在基于ActiveRecord的模型中执行此操作?
谢谢!
插口
我使用ActiveRecord生成如下查询
SELECT * FROM (`foods`) WHERE `type` = 'fruits' AND
`tags` LIKE '%green%' OR `tags` LIKE '%blue%' OR `tags` LIKE '%red%'
Run Code Online (Sandbox Code Playgroud)
数量tags和值未知.数组是动态创建的.下面我添加了一个可能的数组.
$tags = array (
'0' => 'green'.
'1' => 'blue',
'2' => 'red'
);
Run Code Online (Sandbox Code Playgroud)
有一个标签数组,我使用以下循环来创建我发布在顶部的查询.
$this->db->where('type', $type); //var type is retrieved from input value
foreach($tags as $tag):
$this->db->or_like('tags', $tag);
endforeach;
Run Code Online (Sandbox Code Playgroud)
问题:我需要在LIKE下面的子句中添加括号:
SELECT * FROM (`foods`) WHERE `type` = 'fruits' AND
(`tags` LIKE '%green%' OR `tags` LIKE '%blue%' OR `tags` LIKE '%red%')
Run Code Online (Sandbox Code Playgroud)
我知道如果括号内的内容是静态的,但是foreach循环将我抛弃,我该怎么做到这一点.
假设我有一个包含三列的数据库表:ID,Name和Age.我需要找到具有特定(唯一)ID的用户,然后返回年龄.目前,我使用以下代码
$this->db->where('id', '3');
$q = $this->db->get('my_users_table');
Run Code Online (Sandbox Code Playgroud)
我如何为这个用户获取年龄?我想我必须使用
$q->result()
Run Code Online (Sandbox Code Playgroud)
但不知道如何使用它一行.
在codeigniter中使用SMTP的邮件内容出错实际上,我的邮件是带有HTML标签的,它显示的HTML标签不正确.
$config = Array(
'protocol' => 'smtp',
'smtp_host' => 'ssl://smtp.googlemail.com',
'smtp_port' => 465,
'smtp_user' => 'user@gmail.com',
'smtp_pass' => '',
'mailtype' => 'html',
'charset' => 'utf-8',
'wordwrap' => TRUE
);
$this->load->library('email', $config);
$this->email->set_newline("\r\n");
$email_body ="<div>hello world</div>";
$this->email->from('user@gmail.com', 'ddd');
$list = array('user@gmail.com');
$this->email->to($list);
$this->email->subject('Testing Email');
$this->email->message($email_body);
$this->email->send();
echo $this->email->print_debugger();
Run Code Online (Sandbox Code Playgroud)
如果不使用SMTP发送邮件,它可以正常工作.我的错是什么?
可以从Code Igniter中的模型中的另一个模型调用方法吗?我试了一下,在我自动加载了所有模型之后似乎工作了.
但是,模型的排序是否重要?仅仅因为它对我有用并不意味着它一直有效.
尝试URI::uri_string()但无法使用base_url.
网址:http://localhost/dropbox/derrek/shopredux/ahahaha/hihihi
返回:dropbox/derrek/shopredux/ahahaha/hihihi
但http://localhost/dropbox/derrek/shopredux/只返回一个空字符串.
我希望第一个电话返回"ahahaha/hihihi",第二个电话返回"".有这样的功能吗?
我想弄清楚如何is_unique在以下情况下使用Codeigniter表单验证库中的规则.
我正在尝试提交编辑用户表单并具有以下规则:
$this->form_validation->set_rules('user_name', 'User Name', 'required|trim|xss_clean|is_unique[users.user_name]');
Run Code Online (Sandbox Code Playgroud)
如果表单中的其他值被更改但该值保持不变,该怎么办?表单将会看到此值已经存在,因此如果不更改此值,我将如何保护它不被编辑.
因为我想分离系统的前端和后端.我在控制器中创建了2个文件夹作为前端和后端
下面是我的控制器文件夹的结构
controller
--frontend
---store.php
---processing.php
---profile.php
---authenticate.php
---register.php
--backend
---authenticate.php
---stats.php
---users.php
---property_manage.php
---register.php
Run Code Online (Sandbox Code Playgroud)
我可以通过使用来访问这些功能
frontend/store/add
frontend/store/manage
......
backend/stats/sales
backend/stats/payments
.....
Run Code Online (Sandbox Code Playgroud)
但我想从网址中取下前端和后端段.
我检查了codeigniter中的路由功能,但据我所知,我需要单独指定每条路由.由于我有大约12个控制器,每个控制器有大约10-15个功能,我可能需要指定路由的每个功能.
有没有其他有效的方法来实现使用路由或任何其他方式?(不使用任何htaccess)