Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
HTML助手-可重用视图-PHP_Php_Model View Controller_Codeigniter_Views_Html Helper - Fatal编程技术网

HTML助手-可重用视图-PHP

HTML助手-可重用视图-PHP,php,model-view-controller,codeigniter,views,html-helper,Php,Model View Controller,Codeigniter,Views,Html Helper,我是PHP新手,我希望有人能帮助我确定创建可重用视图的最佳方法是什么。我拥有的是一个用于添加或编辑数据的表单。因此,视图将是相同的,除非在编辑的情况下,表单字段将被填充 因此,我正在创建一个HTML帮助程序,它包含两个参数。第一个是表单数据(如果有{edit}),第二个是bool,用于标记这是插入还是编辑(以更改表单操作) 我的问题是。。。如果表单用于添加数据,因此不包含数据,我应该如何处理第一个参数?可选参数 编辑-- 我使用CodeIgnitor作为我的MVC框架。这就是那些表单函数所继承的

我是PHP新手,我希望有人能帮助我确定创建可重用视图的最佳方法是什么。我拥有的是一个用于添加或编辑数据的表单。因此,视图将是相同的,除非在编辑的情况下,表单字段将被填充

因此,我正在创建一个HTML帮助程序,它包含两个参数。第一个是表单数据(如果有{edit}),第二个是bool,用于标记这是插入还是编辑(以更改表单操作)

我的问题是。。。如果表单用于添加数据,因此不包含数据,我应该如何处理第一个参数?可选参数

编辑--

我使用CodeIgnitor作为我的MVC框架。这就是那些表单函数所继承的内容。。供参考

谢谢

    <?php
if(!defined('BASEPATH') ) exit('No direct script access allowed');
if(!function_exists('WorkOrderForm'))
{
    function WorkOrderForm($array = array('$query'),$edit)
    {            
        $formHtml = "";

        $attributes = array('class'=>'order','id'=>'orderForm');

        if($edit)
        {
            $formHtml += form_open('order/update',$attributes);
        }
        else
        {
            $formHtml += form_open('order/add',$attributes);
        }


        $formHtml += form_input('name',$query[0]->name);
        $formHtml += form_textarea('name',$query[0]->description);

         $dropOptions = array('nstarted'=>'Not Started','complete'=>'Done','started'=>'In Progress');
         $formHtml += form_dropdown('status',$dropOptions,$query[0]->status);         
         $formHtml += form_input('name',$query[0]->startDate);
         $formHtml += form_input('name',$query[0]->endDate);
         $formHtml += form_close();




         return $formHtml;
    }
}
?>

首先,默认参数应位于右侧。我会将其默认为“false”或NULL

function WorkOrderForm($edit, $array = false)
然后可能会检查$array是否为true,并将所有$query[0]设置为NULL?所以有点像

      if(!$array) { 
         $query[0]->name = $query[0]->description = $query[0]->status = null; 
      }

可能有更直接的方法,但这是一种方法。

首先,默认参数应该在右边。我会将其默认为“false”或NULL

function WorkOrderForm($edit, $array = false)
然后可能会检查$array是否为true,并将所有$query[0]设置为NULL?所以有点像

      if(!$array) { 
         $query[0]->name = $query[0]->description = $query[0]->status = null; 
      }

可能有一种更直接的方法,但这是一种方法。

首先,如果您将查询作为数组发送给helper函数,那么没有理由将其转换为另一个数组。ie
$array=array(“$query”)
应该是
$query
,这样您就可以访问这样的属性:
$query->name
,而不是
$query[0]->name
。第二,如果你没有编辑表单条目,你的<代码> $Que>/Corp>将是空的,所以你可以用它作为返回的触发器(空白表单或填充表单):

好吧?但是,有一个问题。。。助手中的代码无效。您正在使用算术运算符
+=
连接表单数据。这样做的目的是尝试将
1
添加到字符串中,该字符串始终等于
0
。您要查找的是
=
操作符;这将如预期的那样连接表单。但是,这几乎不能控制表单的外观(实际上,它会将所有表单元素并排放置——不太美观)。您可以做的不是将它们全部连接在一起,
将它们推送到一个数组中,然后逐个回显表单元素:

if($query!=''){

    $form_array=array();
    array_push($form_array,form_open('order/update',$attributes));
    array_push($form_array,form_input('name',$query->name));
    array_push($form_array,form_textarea('name',$query->description));

    $dropOptions = array('nstarted'=>'Not Started','complete'=>'Done','started'=>'In Progress');
    array_push($form_array,form_dropdown('status',$dropOptions,$query->status));         
    array_push($form_array,form_input('name',$query->startDate));
    array_push($form_array,form_input('name',$query->endDate));
    array_push($form_array,form_close());

}else{

    $form_array=array();
    array_push($form_array,form_open('order/add',$attributes));
    array_push($form_array,form_open('order/update'));
    array_push($form_array,form_input('name'));
    array_push($form_array,form_textarea('name'));

    $dropOptions = array('nstarted'=>'Not Started','complete'=>'Done','started'=>'In Progress');
    array_push($form_array,form_dropdown('status',$dropOptions));         
    array_push($form_array,form_input('name'));
    array_push($form_array,form_input('name'));
    array_push($form_array,form_close());

}

return $form_array;
然后,要显示表单元素,请遍历返回的$form_数组:

$form_data='';//blank for new item, or data to populate form with to edit an item
$form_el = WorkOrderForm($form_data);

foreach($form_el as $key=>$val){
    echo $val.'<br>';//I just added a <br> here so each form element will be on a new line; change to fit your needs
}
$form_data=''//新项目为空,或用于填充表单以编辑项目的数据为空
$form\u el=工作订单格式($form\u数据);
foreach($key=>$val形式){
echo$val.
;//我刚刚在这里添加了一个
,这样每个表单元素都将位于新行;请根据需要进行更改 }

希望这有帮助…

首先,如果您将查询作为数组发送给helper函数,那么没有理由将其转换为另一个数组。ie
$array=array(“$query”)
应该是
$query
,这样您就可以访问这样的属性:
$query->name
,而不是
$query[0]->name
。第二,如果你没有编辑表单条目,你的<代码> $Que>/Corp>将是空的,所以你可以用它作为返回的触发器(空白表单或填充表单):

好吧?但是,有一个问题。。。助手中的代码无效。您正在使用算术运算符
+=
连接表单数据。这样做的目的是尝试将
1
添加到字符串中,该字符串始终等于
0
。您要查找的是
=
操作符;这将如预期的那样连接表单。但是,这几乎不能控制表单的外观(实际上,它会将所有表单元素并排放置——不太美观)。您可以做的不是将它们全部连接在一起,
将它们推送到一个数组中,然后逐个回显表单元素:

if($query!=''){

    $form_array=array();
    array_push($form_array,form_open('order/update',$attributes));
    array_push($form_array,form_input('name',$query->name));
    array_push($form_array,form_textarea('name',$query->description));

    $dropOptions = array('nstarted'=>'Not Started','complete'=>'Done','started'=>'In Progress');
    array_push($form_array,form_dropdown('status',$dropOptions,$query->status));         
    array_push($form_array,form_input('name',$query->startDate));
    array_push($form_array,form_input('name',$query->endDate));
    array_push($form_array,form_close());

}else{

    $form_array=array();
    array_push($form_array,form_open('order/add',$attributes));
    array_push($form_array,form_open('order/update'));
    array_push($form_array,form_input('name'));
    array_push($form_array,form_textarea('name'));

    $dropOptions = array('nstarted'=>'Not Started','complete'=>'Done','started'=>'In Progress');
    array_push($form_array,form_dropdown('status',$dropOptions));         
    array_push($form_array,form_input('name'));
    array_push($form_array,form_input('name'));
    array_push($form_array,form_close());

}

return $form_array;
然后,要显示表单元素,请遍历返回的$form_数组:

$form_data='';//blank for new item, or data to populate form with to edit an item
$form_el = WorkOrderForm($form_data);

foreach($form_el as $key=>$val){
    echo $val.'<br>';//I just added a <br> here so each form element will be on a new line; change to fit your needs
}
$form_data=''//新项目为空,或用于填充表单以编辑项目的数据为空
$form\u el=工作订单格式($form\u数据);
foreach($key=>$val形式){
echo$val.
;//我刚刚在这里添加了一个
,这样每个表单元素都将位于新行;请根据需要进行更改 }

希望这有帮助…

你们在干什么?可重用视图比这容易得多。只需创建一个视图并将其保存在views文件夹中。添加添加和编辑数据时都会出现的字段,并在value参数中使用if语句来确定它是否有数据

例如

控制器:

public function add()
{
    $data['method']    = 'add';
    $data['form_data'] = $this->some_model->get_something();
    $this->load->view('reusable_view', $data);
}

public function edit($id)
{
    $data['method']    = 'edit';
    $data['form_data'] = $this->some_model->get_something($id);
    $this->load->view('reusable_view', $data);
}
视图:


你们在干什么?可重用视图比这容易得多。只需创建一个视图并将其保存在views文件夹中。添加添加和编辑数据时都会出现的字段,并在value参数中使用if语句来确定它是否有数据

例如

控制器:

public function add()
{
    $data['method']    = 'add';
    $data['form_data'] = $this->some_model->get_something();
    $this->load->view('reusable_view', $data);
}

public function edit($id)
{
    $data['method']    = 'edit';
    $data['form_data'] = $this->some_model->get_something($id);
    $this->load->view('reusable_view', $data);
}
视图:


使用array_push的方法非常可怕,毫无意义。视图是这些任务的最佳选择,所以请使用它们。我相信这是正确的答案。很遗憾,如果你不是一个洗漱袋,就不能回答这个问题。我不是PHP开发人员,更不是CI PHP开发人员。这就解释了一个天真的问题。使用array_push的方法是可怕的,毫无意义。视图是这些任务的最佳选择,所以请使用它们。我相信这是正确的答案。很遗憾,如果你不是一个洗漱袋,就不能回答这个问题。我不是PHP开发人员,更不是CI PHP开发人员。这可以解释这个天真的问题。