2016-12-21 6 views
1

Я создаю свое первое приложение Userfrosting и пробую несколько простых вещей, но падаю на первое препятствие. Я пытаюсь создать форму, которая добавляет полосы в таблице БД:Userfrosting - Get Working, Post blank screen без ошибок в журнале

CREATE TABLE `uf_band` (
`id` int(11) NOT NULL AUTO_INCREMENT, 
`band_name` text NOT NULL, 
`band_description` longtext NOT NULL, 
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, 
`modified_at` timestamp NULL DEFAULT NULL, 
PRIMARY KEY (`id`) 
) 

initialize.php:

$table_band = new \UserFrosting\DatabaseTable($app->config('db')['db_prefix'] . "band", [ 
    "band_name", 
    "band_description", 
    "created_at", 
    "modified_at" 
]); 

index.php для маршрутов:

$app->get('/bands/new/?', function() use ($app) { 
    $controller = new UF\BandController($app); 
    return $controller->newBand(); 
}); 

Новая группа форма с использованием GET отлично работает. BandController.php

public function newBand(){ 
    if (!$this->_app->user->checkAccess('uri_bands')){ 
     $this->_app->notFound(); 
    } 
    $this->_app->render('bands/new.twig', []); 
} 

и если добавить к этому контроллеру newBand, чтобы проверить, он записывает в базу данных, когда я загружаю новую форму полосы, которая прекрасно:

$new_band = new Band([ 
     "band_name" => "band_name", 
     "band_description" => "band_description" 
    ]); 
    $new_band->save(); 
    $id = $new_band->id; 

Проблема заключается в том Сохранить с помощью сообщения. Даже если я жестко кодирую значения и даже не пытаюсь читать данные POST, все, что я получаю, это пустой экран. Там нет никаких сообщений об ошибках и ничего в апача error.log:

index.php

$app->post('/bands/new/?', function() use ($app) {  
    $controller = new UF\BandController($app); 
    return $controller->saveBand(); 
}); 

BandController.php

public function saveBand(){ 
    $new_band = new Band([ 
     "band_name" => "band_name", 
     "band_description" => "band_description" 
    ]); 
    $new_band->save(); 
    $id = $new_band->id; 
} 

Если я заменить мой POST маршрут с

$app->post('/bands/new/?', function() use ($app) {  
    echo 'post'; 
}) 

Я все еще просто получаю пустой экран.

Вот группы/new.twig, хотя я думаю, что проблема до этого:

{% extends "layouts/layout-dashboard.twig" %} 

{% set page_group = "dashboard" %} 

{% block page %}  
    {% set page = page | merge({ 
     "title"   : "Add New Band", 
     "description" : "" 
    }) %} 
    {{ parent() }} 
{% endblock %} 

{% block content %} 
<h1>{{page.title}}</h1> 
<p>{{page.description}}</p> 

<div class="row"> 
    <div class="col-lg-6"> 
     <div class="panel panel-primary"> 
      <div class="panel-heading"> 
       <h3 class="panel-title"><i class="fa fa-users"></i>Add New Band</h3> 
      </div> 
      <div class="panel-body"> 
       <form class="form-horizontal" role="form" name="bands" action="{{site.uri.public}}/bands/new" method="post"> 

        <div class="form-group"> 
         <label for="input_band" class="col-sm-4 control-label">Band Name</label> 
         <div class="col-sm-8"> 
          <input type="text" id="input_title" class="form-control" name="band_name" placeholder="Please enter the band name"> 
          <!--<p class="help-block">Enter the band name here</p>--> 
         </div> 
        </div> 

        <div class="form-group"> 
         <label for="input_title" class="col-sm-4 control-label">Description</label> 
         <div class="col-sm-8"> 
          <textarea type="text" id="input_title" class="form-control" name="band_description" placeholder="Please enter a description of the band. This may be displayed publically"></textarea> 
          <!--<p class="help-block">This will become the new title for all users in the selected group.</p> --> 
         </div> 
        </div> 

        <div class="form-group"> 
         <label for="input_group" class="col-sm-4 control-label">Genre</label> 
         <div class="col-sm-8"> 
          <select id="input_group" class="form-control select2" name="genre_id"> 
           {% for group in groups %} 
            <option value="{{group.id}}">{{group.name}}</option> 
           {% endfor %} 
          </select> 
         </div> 
        </div> 

        <div class="form-group text-center"> 
         <button type="submit" class="btn btn-success text-center">Add Band</button> 
        </div> 
       </form> 
      </div> 
     </div> 
    </div> 
</div> 

{% endblock %} 
{% block page_scripts %} 
    <script> 

$(document).ready(function() { 
    // Load the validator rules for this form 
    var validators = {{validators | raw}}; 
    ufFormSubmit(
     $("form[name='add_band']"), 
     validators, 
     $("#userfrosting-alerts"), 
     function(data, statusText, jqXHR) { 
      // Reload the page on success 
      window.location.reload(true); 
     } 
    ); 
}); 

</script> 
{% endblock %} 

Спасибо за любые мысли. Без сообщений об ошибках это сводит меня с ума!

ответ

3

Похоже, вы забыли токен csrf.

Вы можете добавить скрытое поле ввода:

<input type="hidden" name="{{csrf_key}}" value="{{csrf_token}}">

и далее here.

+0

Спасибо - кажется, что мои валидаторы не правильно подобраны в этой строке new.twig whoich нарушает мой javascript: '' '' var validators = {{validators | raw}}; '' '' –

+0

Yup! Кстати, вы можете использовать свою [консоль браузера] (https://learn.userfrosting.com/background/client-side) для отладки ошибок Javascript. – alexw

 Смежные вопросы

  • Нет связанных вопросов^_^