使用slim + twig的php会话,扩展另一个的模板不能有一个正文

时间:2015-06-20 09:43:12

标签: php session twig slim

我正在制作一个细长的网站,并在尝试设置用户身份验证系统时遇到了一些问题。

我正在使用标准LAMP配置(mysql,php5,apache2),以及作曲家,树枝和纤细。

我读过低级this教程并认为我做了类似的事情,但不知道如何将其应用到我的应用程序中。我遇到问题的是php sessions部分。到目前为止,我只使用phpPDO进行数据库连接(我使用POST调用AJAX来调用我的.php文件),但现在看来我实际上需要将php代码插入我的twig文件中。

所以我试着这样做:

{% extends 'main.twig' %}

<?php
/*** begin our session ***/
session_start();
/*** set a form token ***/
$form_token = md5( uniqid('auth', true) );
/*** set the session form token ***/
$_SESSION['form_token'] = $form_token;
?>

{% block title %}
Sign Up | PTC Testers
{% endblock title %}

{% block stylesheet %}
<link rel="stylesheet" type="text/css" href="css/login.css">
{% endblock stylesheet %}

{% block content %}
<h1>Sign Up</h1>
    <form method="post">
        <fieldset>
            <p>
                <label for="email">Email</label>
                <input type="text" name="email" value="" maxlength="40" placeholder="john@example.com">
            </p>
            <p>
                <label for="password">Password</label>
                <input type="text" name="password" value="" maxlength="20" />
            </p>
            <p>
                <input type="hidden" name="form_token" value="<?php echo $form_token; ?>" />
                <input type="submit" value="&rarr; Login" />
            </p>
        </fieldset>
    </form>
{% endblock content %}

并收到以下错误:A template that extends another one cannot have a body in "signup.twig" at line 2.

由于这是我第一次做这样的事情,我不知道如何继续,以及正确的做法是什么。任何意见都表示赞赏。

如果您需要有关我的应用,配置和诸如此类的更多信息,here's a github repository of the project。相关文件位于db_queriestemplates和根文件夹(index.php)中。

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

来自the Slim documentation

  

Slim应用程序不会假定有关会话的任何内容。如果您更喜欢使用PHP会话,则必须在实例化Slim应用程序之前使用session_start()配置和启动本机PHP会话。

另外,不是放入不可能的模板,而是实际需要的是middleware.

这意味着在index.php中,您的代码看起来像:

<link rel="stylesheet" href="https://ssl.gstatic.com/docs/script/css/add-ons1.css">
<!-- https://developers.google.com/apps-script/add-ons/css -->

<link rel="stylesheet" href="//code.jquery.com/ui/1.11.3/themes/smoothness/jquery-ui.css">
<!-- this CSS package is for the jquery datepicker  -->

<div>
  <h1>Use the form below to enter a new entry into the calendar</h1>
  
  <table>
  <form>
  
    <tr>
      <td>
          Title: <input type='input' id='title' />
      </td>
      <td>
          Description:<input type='input' id='description' />
      </td>
     </tr>
     
     
    <tr>
      <td>
          Date: <input type='text' id='date_choice' value="" />
      </td>
      <td>
          <label for="select">Time of day</label>
          <select id="select">
            <option value='before' >Before School Starts</option>
            <option value='morning' selected>Morning</option>
            <option value='lunchtime'>Lunchtime / Afternoon</option>
            <option value='afterschool'>After School has ended</option>
          </select>
       </td>
   </tr>
   
   
   
   <tr>
     <td colspan='2' style='text-align: center;'>
        <button class="create" id="insert-entry">Insert</button>
      </td>
   </tr>
</form>
</table>
</div>

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js">
</script>
<script src="//code.jquery.com/ui/1.11.3/jquery-ui.js"></script>
<script>
$(document).ready(function(){
  $( "#date_choice" ).datepicker({
    dateFormat: "dd/mm/yy"
  });
  
  $("#insert-entry").click(InsertIntoCal);
});

function InsertIntoCal(){
  
  var title = document.getElementById("title").value; 
  var descr = document.getElementById("description").value; 
  var date = document.getElementById("date_choice").value; 
  var time = document.getElementById("select").value; 
  
  alert(title); alert(descr); alert(date); alert(time);
}
</script>

那就是说,Slim已经为你提供了这个功能作为一个单独的包 - Slim-Csrf - 值得一试。