【问题标题】:CakePHP 2.2.3: How to pass variables from one form to anotherCakePHP 2.2.3:如何将变量从一种形式传递到另一种形式
【发布时间】:2014-02-08 08:29:52
【问题描述】:

我对 CakePHP 还很陌生,我尝试搜索与我正在尝试做的事情相关的问题,但我认为它没有被问到所以这里是:

我正在为一所学校开发学生表格网站。学校有他们自己的特殊登录系统,他们希望用户能够使用它,而不是拥有自己单独的登录系统的网站。所以在我的User 视图中,我的login.ctp 文件从UserController 调用login(),登录功能成功连接到学校的登录系统并验证用户的凭据(用户名和密码被存储在$user_name$user_pass)。

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

如何以这种新形式访问$user_name$user_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>

注册查看:

<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 forms cakephp


【解决方案1】:

以编写方法的方式处理登录方法并不是一个好习惯。 follow this article for login

用提交按钮结束表单不是一个好习惯。这样做之后

<?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...
     }
}

【讨论】:

  • 我给出的代码是伪代码,不是我的实际代码。我遇到的问题是我无法使用 Cake 的 Auth->login() 方法,因为学生需要通过学校现有的外部学生帐户系统登录。这意味着我无权访问他们的数据库,我只能将信息发送到系统以查看给定的凭据是否有效。我需要一个注册步骤,因为我正在构建的系统需要学生的名字和姓氏,我们需要将其与他们的学校帐户相关联。
  • 您有他们的电子邮件地址吗?或 id/ 或任何您可以搜索该字段的字段?
  • 学生使用学生证登录。过去,学生的姓名会附在他们的 ID 上,但出于安全考虑而更改了(系统可以匿名登录,然后收集姓名和 ID)。所以我真的只需要弄清楚如何将变量从我的 login() 函数传递给我的 register() 函数。
  • 你想通过提交按钮从登录页面到注册页面吗?如果是。告诉我你在登录和注册视图中有什么。
猜你喜欢
  • 1970-01-01
  • 2021-12-22
  • 2017-03-16
  • 1970-01-01
  • 2015-06-23
相关资源
最近更新 更多