标签: codeigniter

如何将基于页面的PHP应用程序转换为MVC?

我已经苦苦挣扎了一段时间,正是如何使用MVC框架重新编码基于页面的PHP应用程序.仅仅是为了背景,我不得不将应用程序转移到MVC,因为我的老板正在制作我.无论如何,我坐下来打印出目录结构.然后我开始尝试计划如何将这些页面转换为控制器/动作对.有些事情似乎很直接.例如,我有几页专门用于添加/编辑/删除用户.这很容易创建一个"用户"控制器,并添加添加/编辑/删除的方法或操作.我遇到问题的地方在于决定何时实际创建一个控制器,而不是只做一个动作,因为它并不总是那么明确.例如,登录控制器与用户/登录,或寄存器控制器与用户/寄存器.对我来说,

另一个例子是,我有大约12个用于创建"计划"的表单页面.在我脑海中,我认为我需要创建一个"计划"控制器,然后每个旧的页面将成为一个动作.所以我有一个控制器有12个动作(方法).对我来说问题是,虽然这些页面中的所有12页都是数据输入表格,但最终构成了这个"计划",这是他们共同拥有的.每个页面在数据库中使用不同的表,并且彼此之间没有任何其他共同点.基本上通过创建一个"计划"控制器,我只是真的使用它作为分组机制; 不一定使用它,因为它们有相互关联的东西.至少在上面的"用户"控制器示例中; 这些行动中的每一个都使用相同的"

我想它只是归结为让我自己使用控制器作为层次结构实体而不是对象/动作.看起来很容易使用控制器以错误的方式陷入陷阱.有谁知道我在说什么?希望它不会太混乱.

编辑:如果我尝试坚持每个视图一个控制器; 然后,我会将每个请求的代码保持在最低限度.这是最好的方法吗?

编辑:从每个人的意见来看,似乎每个视图的一个控制器不符合我的最佳利益.我仍然有一些担忧,因为看起来控制器可能会匆忙变胖,但这是另一个讨论.我还有一些问题,何时决定使用控制器而不是动作.一个很好的例子是堆栈溢出本身.在页面顶部,您有一个"问题"选项,我们可以假设将您带到"问题"控制器.我这样说是因为在右侧您可以选择"提出问题",URL指向"问题/提问".这是有道理的,你使用问题控制器的ask方法.令我困惑的是,您在菜单上有"未答复"选项.它看起来像是一个控制器.为什么它不仅仅是问题控制下的行动,如"问题/未答复"?这就是我变得浑浊的地方.

php model-view-controller controller codeigniter

11
推荐指数
1
解决办法
5195
查看次数

从codeigniter中查看访问模型?

任何人都可以告诉我如何从codeigniter中的视图访问模型?

php codeigniter

11
推荐指数
4
解决办法
5万
查看次数

在会话中访问数组变量(CodeIgniter)

我有一个名为config的数组.我正在尝试在会话中回显数组中的变量.

我试过了:

echo $this->session->userdata('config['item']'); 
Run Code Online (Sandbox Code Playgroud)

但它不起作用.这里我的语法有什么问题?我打印了我的会话,这些项目都在配置数组中.我也尝试过:

echo $this->session->userdata("config['item']");
Run Code Online (Sandbox Code Playgroud)

这次我没有错误,但也没有数据.

codeigniter

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

DataMapper ORM与Doctrine

我即将开始在CodeIgniter中开发一个新的Web应用程序.过去,我使用DataMapper ORM来满足我的对象映射需求,并且对它的功能完全满意.但是,我的满意度仅限于我的知识.因此,我正在考虑转向学说.

我查看了Doctrine的文档 - 看来你必须非常广泛地定义你的模型; 添加getter和setter,提供方向引用,提供映射等.乍一看,这似乎是与DataMapper ORM直接比较的巨大开销.

任何有两个ORM经验的人都会评论是什么驱使你从一个到另一个吗?

Doctrine对DataMapper ORM无法实现什么关键功能?

手动模型定义是向后还是向前迈出的一步?我认为这是表演的事情.

php orm doctrine codeigniter codeigniter-datamapper

11
推荐指数
1
解决办法
6233
查看次数

CodeIgniter - 私有函数

我现在开始玩CodeIgniter了.我使用他们的用户指南和其他可用于学习的第三方教程.我对私人功能的命名有些困惑.根据用户指南,我必须_在私有函数的名称前加上一个.但在本教程中,请检查" 添加注销"部分.其中有一个私人功能:private function check_isvalidated().这里,它没有前缀字符_.

那么这也是一个公认的命名惯例?与此同时,还有一个叫做_output():处理输出.它是一个公共函数,具有私有函数的命名约定!

当我尝试以系统的方式学习时,这有点令人困惑.

codeigniter

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

获取当前季度php的startdate和enddate

我试图按季度设置开始日期和结束日期.

例如,我正在开发一个报告系统,我需要报告第1季度,第2季度,第3季度和第4季度的数据.

第一季度 - 1月至3月

第二季度 - 四月至六月

第三季度 - 七月至九月

第四季度 - 十月至十二月

例如,我有一些当月和上个月的案例,如下所示.

   case 'this_month':
      $start_date = date(DATE_FORMAT, mktime(0, 0, 0, date("m"), 1, date("Y")));
      $end_date = date(DATE_FORMAT, mktime(0, 0, 0, date("m"), date("d"), date("Y")));
    break;
    case 'last_month':
      $start_date = date(DATE_FORMAT, mktime(0, 0, 0, date("m") - 1, 1, date("Y")));
      $end_date = date(DATE_FORMAT, mktime(0, 0, 0, date("m"), 0, date("Y")));
    break;
Run Code Online (Sandbox Code Playgroud)

但现在我需要为此和上个季度添加案例,我不确定如何实际这样做,因此它反映了适当的季度范围.

有任何想法吗?

php codeigniter date

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

Codeigniter发送带附件的电子邮件

我正在尝试使用附加文件在codeigniter上发送电子邮件.

我总是成功收到电子邮件.但是,我从未收到过附件.以下是代码,非常感谢所有评论.

    $ci = get_instance();
    $ci->load->library('email');
    $config['protocol'] = "smtp";
    $config['smtp_host'] = "ssl://smtp.gmail.com";
    $config['smtp_port'] = "465";
    $config['smtp_user'] = "test@gmail.com";
    $config['smtp_pass'] = "test";
    $config['charset'] = "utf-8";
    $config['mailtype'] = "html";
    $config['newline'] = "\r\n";

    $ci->email->initialize($config);

    $ci->email->from('test@test.com', 'Test Email');
    $list = array('test2@gmail.com');
    $ci->email->to($list);
    $this->email->reply_to('my-email@gmail.com', 'Explendid Videos');
    $ci->email->subject('This is an email test');
    $ci->email->message('It is working. Great!');

    $ci->email->attach( '/test/myfile.pdf');
    $ci->email->send();
Run Code Online (Sandbox Code Playgroud)

php email codeigniter email-attachments

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

如何使用带有Codeigniter的jQuery Nestable插件创建子级菜单?

我使用的jQuery插件嵌套与Codeigniter3创建5级网站,供用户一个很好的解决方案可以单调而下降到改变的菜单项的水平和位置的菜单.但是我的下面的功能只能创建第一级菜单,当我更改为菜单项的子级别(2,3,4,5)时,它对我不起作用.

问题我无法将菜单项从第一级更改为另一级.我不能逆转的菜单项回到父母,如果我已经改变了它是一个孩子的任何的父母.无论Jquery Nestable如何工作都会如此.

以下函数用于将菜单项更新为依赖于菜单列的数据库,如:id,parent_id,m_order.

此函数将通过foreach和array_key_exists检查$ List数组内部,如下所述:

  1. 使用$ this-> get_child($ this-> input-> post('list'))从表单获取数组数据;
  2. 使用的foreach和array_key_exists函数来检查任何childrent的$列表排列,如果发现任何儿童会更新到数据库如下CI功能.
  3. 而这个if($ parent_id!= $ item ['id']){...}将不会更新parent_id作为父项的当前id.

    public function savelist() {
    
        if ($this->input->post('list')) {
            $this->do_update($this->input->post('list'));
        }
    }
    
    public function do_update($list, $parent_id = 0, &$m_order = 0) {
    
        foreach …
    Run Code Online (Sandbox Code Playgroud)

php jquery codeigniter

11
推荐指数
1
解决办法
3355
查看次数

从codeigniter中的where_in中删除单引号

我正在研究一项search功能.我创建了一个搜索表单中,用户可以搜索基于应用程序Type,ope及Formate.

我在连接查询中使用了子查询来获得所需的结果.我已经在nad 测试了我的查询它工作正常.MySQL Workbench

但是当我使用查询构建器技术在Codeigniter中尝试相同的查询时,我遇到了一个问题.

这是在工作台中工作正常的查询:

SELECT (*)
FROM `App`
LEFT JOIN `App_type` 
ON `App_type`.`app_id` = `App`.`id`
LEFT JOIN `App_formate` 
ON `App_formate`.`app_id` = `App`.`id`
WHERE `App`.`id` IN(select app_id FROM App_type WHERE type_id in (3,2,6) group by app_id HAVING COUNT(*) = 3)
AND `App_formate`.`formate_id` IN('1', '3')
AND `jobs`.`ope_min` <= '3'
AND `jobs`.`ope_max` >= '3'
GROUP BY `jobs`.`id`;
Run Code Online (Sandbox Code Playgroud)

这是我使用的连接查询:

$subquery = "select app_id FROM App_type WHERE type_id in ($selected_type) …
Run Code Online (Sandbox Code Playgroud)

php mysql codeigniter

11
推荐指数
2
解决办法
5341
查看次数

PHPExcel Cells相互重叠> setRowHeight(-1)自动单元格高度不起作用


更新

使用PHPSpreadsheet测试我在下面有我试过的代码.如果我在编写文件时使用xls,它似乎适用于MSOffice Excel.注意不使用Libre Office不会自动调整行需要它也可以与libre office一起使用.

$spreadsheet->getActiveSheet()->getRowDimension(1)->setRowHeight(-1);

foreach($spreadsheet->getActiveSheet()->getRowDimensions() as $rowID) { 
    $rowID->setRowHeight(-1); 
}
Run Code Online (Sandbox Code Playgroud)

新控制器

<?php

require(APPPATH . 'vendor/autoload.php');

use PhpOffice\PhpSpreadsheet\Spreadsheet;

class Events extends MX_Controller {

    public function test() {
        $spreadsheet = new Spreadsheet();

        $spreadsheet->getDefaultStyle()->getFont()->setName('Arial');
        $spreadsheet->getDefaultStyle()->getFont()->setSize(24);

        foreach(range('A','B') as $columnID) {
            $spreadsheet->getActiveSheet()->getColumnDimension($columnID)->setAutoSize(true);
        }

        $spreadsheet->getActiveSheet()->getRowDimension(1)->setRowHeight(-1);

        foreach($spreadsheet->getActiveSheet()->getRowDimensions() as $rowID) { 
            $rowID->setRowHeight(-1); 
        }

        $spreadsheet->setActiveSheetIndex(0)
                ->setCellValue("A1",'Firstname')
                ->setCellValue("B1",'Lastname');

        $spreadsheet->getActiveSheet()->setTitle('Users Information');

        $spreadsheet->setActiveSheetIndex(0);

        /* Here there will be some code where you create $spreadsheet */

        // redirect output to client browser
        header('Content-Type: application/vnd.ms-excel'); …
Run Code Online (Sandbox Code Playgroud)

php codeigniter phpexcel phpexcel-1.8.0

11
推荐指数
1
解决办法
1840
查看次数