将参数发送到控制器功能失败

时间:2015-11-24 12:07:51

标签: php codeigniter

这是我的第一个codeigniter项目,我收到了一些错误。

我尝试使用以下代码将参数发送到控制器功能。但它在控制器文件中显示'Missing arguement 1 for school::add_topic'

的错误

这是我的代码:-view file-我只包含了代码的重要部分

<?php
$createdby='';
?>
<a class="admin-btn" href="<?php echo base_url(); ?>index.php/school/add_topic/<?php echo myfunction(); ?>">Add Topic</a>
<?php
foreach ($r as $new)
{
    ?>
    <?php 
    if($new->id_class==$class && $new->id_subject==$sub)
    {
        $createdby=$new->id_login;
        ?>
        <tr><th>Class</th><td> <?php echo $new->class_name; ?></td></tr>
        <tr><th>Subject</th><td>
        <?php echo $new->subject_name; ?></td></tr>
        <tr><th>Created By</th><td>
        <?php echo $new->staff_name; ?></td>
        <th>Created On</th><td>
        <?php echo $new->created_on; ?></td></tr>


    <?php
    }
}
function myfunction()
{
global $createdby;
return $createdby;
}
?>  

我想要做的是将变量'$createdby'发送到我的控制器函数'add_topic()'

这是我的控制器功能:

public function add_topic($createdby)
{
    $data['createdby'] = $createdby;
    $this->load->view('topic_add',$data);
}

提前致谢。

2 个答案:

答案 0 :(得分:0)

index.php/school/add_topic/只是对控制器add_topic的函数school的调用,但是没有参数,所以函数没有得到任何东西。斜杠后添加参数(例如index.php/school/add_topic/xyz)和$createdby将为xyz。

此外,您可以使用网址助手的site_url()功能,而不是撰写index.php/xxxxx

site_url('school/add_topic/param');

在你的例子中,你有一个非常复杂的结构 - 为什么不这样使用它:

<a class="admin-btn" href="<?=site_url('school/add_topic/'.$createdby)?>">Add Topic</a>

您可能会看到另一个提示:<?php echo $xyz; ?>可以写成<?=$xyz?>=是回音。

答案 1 :(得分:0)

实际上你的代码流是不正确的,因此在创建初始化之前已经调用了$ createdby。您可以尝试以下代码:

<?php
$createdby='';
$selected = '';
if (!empty($r)) {
    foreach ($r as $new)
    {
        if($new->id_class==$class && $new->id_subject==$sub)
        {
            $createdby=$new->id_login;
            $selected = $new;
            break;
        }
    }
}
?>
<a class="admin-btn" href="<?php echo base_url().'index.php/school/add_topic/'. myfunction(); ?>">Add Topic</a>
<?php
if (!empty($selected)) {
    ?>
        <tr><th>Class</th><td> <?php echo $selected->class_name; ?></td></tr>
        <tr><th>Subject</th><td>
        <?php echo $selected->subject_name; ?></td></tr>
        <tr><th>Created By</th><td>
        <?php echo $selected->staff_name; ?></td>
        <th>Created On</th><td>
        <?php echo $selected->created_on; ?></td></tr> <?php
}

function myfunction()
{
global $createdby;
return $createdby;
}
?> 

并且还有可能$ createdby未初始化,因此控制器功能应该有一个可选参数而不是固定参数。

public function add_topic($createdby = '')
{
    $data['createdby'] = $createdby;
    $this->load->view('topic_add',$data);
}