CakePHP 2.2.3:如何将变量从一种形式传递到另一种形式

CakePHP 2.2.3:如何将变量从一种形式传递到另一种形式,php,forms,cakephp,Php,Forms,Cakephp,我对CakePHP非常陌生,我尝试过搜索一个与我正在尝试做的事情相关的问题,但我认为还没有人问过,所以这里是: 我正在为一所学校开发一个学生表单网站。学校有自己的特殊登录系统,他们希望用户能够使用,而不是网站有自己的独立登录系统。因此,在我的User视图中,我得到了我的login.ctp文件,该文件从UserController调用login(),登录函数成功地连接到学校的登录系统并验证用户的凭证(用户名和密码存储在$User\u name和$User\u pass中) 然后,我让登录功能检查用

我对CakePHP非常陌生,我尝试过搜索一个与我正在尝试做的事情相关的问题,但我认为还没有人问过,所以这里是:

我正在为一所学校开发一个学生表单网站。学校有自己的特殊登录系统,他们希望用户能够使用,而不是网站有自己的独立登录系统。因此,在我的
User
视图中,我得到了我的
login.ctp
文件,该文件从
UserController
调用
login()
,登录函数成功地连接到学校的登录系统并验证用户的凭证(用户名和密码存储在
$User\u name
$User\u pass
中)

然后,我让登录功能检查用户是否是第一次登录,方法是检查
用户
模型中用于登录学校系统的用户名。如果用户名不存在,表单将重定向到
register.ctp
(仍然是
用户
视图),其中要求用户填写他们的名字、姓氏以及存储在
用户
模型中的一些其他信息。我还需要这张登记表来存储登录学校系统时使用的用户名和密码。一旦用户注册,应重定向到
学生/表单
视图并使用
学生控制器

如何在此新表单中访问
$user\u name
$user\u pass
?我不希望用户能够输入这些信息(应该放在只读输入框中)

我应该在
UserController
中创建一个函数
register()
,创建一个新的
User
以添加到数据库中吗

对不起,如果这已经涵盖了

下面是我的代码的一个伪示例:

UserController:
login(){
   $user_name = $_POST['username'];
   $user_pass = $_POST['pwd'];
   $data = array('username' => $user_name, 'pwd' => $user_pass);

   if(validate($user_name, $user_pass)){
      if(!exists($user_name)){
         $this->redirect(array('action' => 'register', $data));//Passing the log in data to the register function and view
      } else {$this->redirect(array('controller' => 'forms', 'action' => 'students'));}
   } else {//display invalid credential message}
}

register(){
   AppController::loadModels(array('User'));
   $this->set($data);//Setting the data passed by login() so the register.ctp view can use it
   //grab post data from registration form
}
我得到一个错误,说$data是一个未定义的变量,尽管在寄存器函数中,即使我在重定向中传递它。我如何正确地做到这一点

登录视图:

<div class="main-content">
    <div class="hero-unit span5 centerIt">
        <?php echo $this->Session->flash(); ?>
        <?php echo $this->Session->flash('auth'); ?>
        <?php echo $this->Form->create('User', array('action'=>'login')); ?>
        <fieldset id="login">
            <h2> User Login</h2>
            <p> Please Enter your [sic] Credentials </p>
            <p>
                <?php echo $this->Form->input('username', array('label' => 'Username: ', 'type' => 'text', 'value' =>'')); ?>
            </p>
            <p>
                <?php echo $this->Form->input('password', array('label' => 'Password: ', 'type' => 'password')); ?>
            </p>
            <p>
                <?php echo $this->Form->input('remember', array('type'=>'checkbox', 'label'=>'Remember me')); ?>
            </p>
        </fieldset>
        <div class="submit pull-right">
            <input type="submit" value="Login" class="btn btn-primary">
        </div>
    </div>
</div>

用户登录
请输入您的[sic]凭证

注册视图:

<div class="main-content">
<div class="hero-unit span5 centerIt">
    <?php echo $this->Form->create('User', array('action'=>'register')); ?>
    <fieldset>
        <legend><?php echo __('Register New User'); ?></legend>
        <p class="subHead"> Note: This information can't be changed later, please check that your info is correct.</p>
        <?php echo $this->Form->input('username', array(
                    //'value' => $_POST['data']['username'],
                    'readonly' => 'readonly'));
            echo $this->Form->input('password', array(
                    //'value' => $_POST['data']['pwd'],
                    'readonly' => 'readonly'));
            echo $this->Form->input('fname', array(
                    'label' => 'First Name'));
            echo $this->Form->input('lname', array(
                    'label' => 'Last Name'));
            echo $this->Form->input('role', array(
                            'options' => array('student' => 'Student')));
        ?>
    </fieldset>
    <div class="submit pull-right">
        <input type="submit" value="Submit" class="btn btn-primary">
    </div>
</div>
</div>

注意:此信息以后不能更改,请检查您的信息是否正确


使用登录方法编写方法的方式不是一种好的做法。

用提交按钮结束表单不是一个好的做法。在这之后

<?php echo $this->Form->end(__('submit')); ?>


//login method
public function login() {
     $user = $this->User->findByUsername($this->request->data['User']['username']);
     if(empty($user)){
            $this->request->data = $this->User->read(null, $user['User'][''id]);
            $this->redirect method...
     }
}

//登录方法
公共函数登录(){
$user=$this->user->findByUsername($this->request->data['user']['username']);
if(空($user)){
$this->request->data=$this->User->read(null,$User['User']['id]);
$this->重定向方法。。。
}
}

Use sessions it easy我给出的代码是伪代码,不是我的实际代码。我的问题是我无法使用Cake的Auth->login()方法,因为学生需要通过学校预先存在的外部学生帐户系统登录。这意味着我无法访问他们的数据库,我只能向系统发送信息,以查看给定的凭据是否有效。我需要注册步骤,因为我正在构建的系统需要学生的名字和姓氏,我们需要将其与学校帐户关联。你有他们的电子邮件地址吗?或id/或任何可以搜索该字段的字段吗?学生使用其学生id登录。过去,学生的姓名被附加到他们的ID上,但由于安全问题,这被更改(系统可以匿名登录,然后收集姓名和ID)。所以我真的需要弄清楚如何将一个变量从我的login()函数传递到我的register()函数。您想通过从登录页面到注册页面的submit按钮来完成吗?如果有的话。显示您在登录和注册视图中的内容。