2015-05-15 3 views
1

У меня есть функциональность, которая создает всплывающее окно с небольшой отзывчивостью (это работает), у меня есть этот html-код, который является моим всплывающим окном (он использует диалог jquery для показать всплывающее окно, но форма только между моим другом HTML кода, в окружении DIV, что делает его невидимым):Laravel POST Token missmatch exception (загрузка файла)

<form id="logform" method="POST"> 
<select id='logoption'> 
<option value="0"> Select logtype </option> 
<?php 
//SQL in laravel style to get log types from database 
$logtypes = DB::table('time_log_types')->get(); 

foreach ($logtypes as $logtype) 
{ 
echo ' <option value="'. $logtype->id . '">' . $logtype->logtype.'</option>'; 
} 
?> 
</select> 
<div id="illness" style="display:none"> 
<p>End date: <input type="text" id="enddate"></p> 
<p>Doctor's note: <input type="file" id="doctorsnote"></p>            
</div>           
<input type="button" value="submit" id="submitbutton" style="display:none" /> 
</form> 

кнопку отправки на этом всплывающем окне делает это (с помощью JQuery):

<script> 
$(document).ready(function() { 
    //File upload 
$('#submitbutton').on('click', function() { 
      var fd = new FormData(document.getElementById("logform")); 
//fd.append("CustomField", "This is some extra data"); 
      $.ajax({ 
       url: ' ', 
       type: 'POST', 
       data: fd,     
       cache: false, 
       contentType: false, 
       processData: false 
      }); 
     }); 
    }); 

</script> 

Я убедился, что мой POST действительно подходит к правильному месту, добавив это r Oute в моем routes.php (я знаю, что я отправляю в правильном месте, потому что я проверил вкладку сети при использовании Проверьте элемент в светлячок):

Route::post('calendar', '[email protected]'); 

Наконец это код у меня в LogController:

<?php namespace App\Http\Controllers; 

use Input; 

class LogController extends Controller { 

    public function upload() {  
     $file = Input::file('doctorsnote'); 
     $destinationPath = 'C://xampp/htdocs/proofofconcept/savedImages'; 
     // If the uploads fail due to file system, you can try doing public_path().'/uploads' 
     $filename = str_random(12); 
     //$filename = $file->getClientOriginalName(); 
     //$extension =$file->getClientOriginalExtension(); 
     $upload_success = $file->move($destinationPath, $filename); 

     if($upload_success) { 
      return Response::json('success', 200); 
     } else { 
      return Response::json('error', 400); 
     } 
    } 
} 

проблема заключается в том, когда я нажимаю кнопку отправки я получаю 500 ответ, и я зарегистрировал это сообщение об ошибке, но я понятия не имею, что с ним делать:

> [2015-05-15 10:08:14] local.ERROR: exception 
> 'Illuminate\Session\TokenMismatchException' in 
> C:\xampp\htdocs\proofofconcept\laravel\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\VerifyCsrfToken.php:46 
> Stack trace: 
> #0 C:\xampp\htdocs\proofofconcept\laravel\app\Http\Middleware\VerifyCsrfToken.php(17): 
> Illuminate\Foundation\Http\Middleware\VerifyCsrfToken->handle(Object(Illuminate\Http\Request), 
> Object(Closure)) 
> #1 C:\xampp\htdocs\proofofconcept\laravel\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(125): 
> App\Http\Middleware\VerifyCsrfToken->handle(Object(Illuminate\Http\Request), 
> Object(Closure)) 
> #2 C:\xampp\htdocs\proofofconcept\laravel\vendor\laravel\framework\src\Illuminate\View\Middleware\ShareErrorsFromSession.php(55): 
> Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) 
> #3 C:\xampp\htdocs\proofofconcept\laravel\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(125): 
> Illuminate\View\Middleware\ShareErrorsFromSession->handle(Object(Illuminate\Http\Request), 
> Object(Closure)) 
> #4 C:\xampp\htdocs\proofofconcept\laravel\vendor\laravel\framework\src\Illuminate\Session\Middleware\StartSession.php(61): 
> Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) 
> #5 C:\xampp\htdocs\proofofconcept\laravel\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(125): 
> Illuminate\Session\Middleware\StartSession->handle(Object(Illuminate\Http\Request), 
> Object(Closure)) 
> #6 C:\xampp\htdocs\proofofconcept\laravel\vendor\laravel\framework\src\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse.php(36): 
> Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) 
> #7 C:\xampp\htdocs\proofofconcept\laravel\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(125): 
> Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse->handle(Object(Illuminate\Http\Request), 
> Object(Closure)) 
> #8 C:\xampp\htdocs\proofofconcept\laravel\vendor\laravel\framework\src\Illuminate\Cookie\Middleware\EncryptCookies.php(40): 
> Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) 
> #9 C:\xampp\htdocs\proofofconcept\laravel\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(125): 
> Illuminate\Cookie\Middleware\EncryptCookies->handle(Object(Illuminate\Http\Request), 
> Object(Closure)) 
> #10 C:\xampp\htdocs\proofofconcept\laravel\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode.php(42): 
> Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) 
> #11 C:\xampp\htdocs\proofofconcept\laravel\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(125): 
> Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode->handle(Object(Illuminate\Http\Request), 
> Object(Closure)) 
> #12 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) 
> #13 C:\xampp\htdocs\proofofconcept\laravel\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(101): 
> call_user_func(Object(Closure), Object(Illuminate\Http\Request)) 
> #14 C:\xampp\htdocs\proofofconcept\laravel\vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php(115): 
> Illuminate\Pipeline\Pipeline->then(Object(Closure)) 
> #15 C:\xampp\htdocs\proofofconcept\laravel\vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php(84): 
> Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter(Object(Illuminate\Http\Request)) 
> #16 C:\xampp\htdocs\proofofconcept\laravel\public\index.php(53): Illuminate\Foundation\Http\Kernel->handle(Object(Illuminate\Http\Request)) 
> #17 {main} 

у меня есть абсолютно п o Идея, что происходит, я создал этот код, следуя руководствам со всех сторон, и насколько я могу сказать, что это должно работать, но я как бы новичок во всем этом, и я мог бы использовать некоторую помощь, чтобы выяснить это.

EDIT: Я добавил новое поле в моей форме, чтобы включить маркер CSRF так:

<input type="hidden" name="_token" value="<?php echo csrf_token(); ?>"> 

и теперь я получаю различный StackTrace:

[2015-05-15 11:21:23] local.ERROR: exception 'ReflectionException' with message 'Class App\Http\Controllers\LogController does not exist' in C:\xampp\htdocs\proofofconcept\laravel\vendor\laravel\framework\src\Illuminate\Container\Container.php:776 
Stack trace: 
#0 C:\xampp\htdocs\proofofconcept\laravel\vendor\laravel\framework\src\Illuminate\Container\Container.php(776): ReflectionClass->__construct('App\Http\Contro...') 
#1 C:\xampp\htdocs\proofofconcept\laravel\vendor\laravel\framework\src\Illuminate\Container\Container.php(656): Illuminate\Container\Container->build('App\Http\Contro...', Array) 
#2 C:\xampp\htdocs\proofofconcept\laravel\vendor\laravel\framework\src\Illuminate\Foundation\Application.php(644): Illuminate\Container\Container->make('App\Http\Contro...', Array) 
#3 C:\xampp\htdocs\proofofconcept\laravel\vendor\laravel\framework\src\Illuminate\Routing\ControllerDispatcher.php(83): Illuminate\Foundation\Application->make('App\Http\Contro...') 
#4 C:\xampp\htdocs\proofofconcept\laravel\vendor\laravel\framework\src\Illuminate\Routing\ControllerDispatcher.php(54): Illuminate\Routing\ControllerDispatcher->makeController('App\Http\Contro...') 
#5 C:\xampp\htdocs\proofofconcept\laravel\vendor\laravel\framework\src\Illuminate\Routing\Route.php(204): Illuminate\Routing\ControllerDispatcher->dispatch(Object(Illuminate\Routing\Route), Object(Illuminate\Http\Request), 'App\Http\Contro...', 'upload') 
#6 C:\xampp\htdocs\proofofconcept\laravel\vendor\laravel\framework\src\Illuminate\Routing\Route.php(134): Illuminate\Routing\Route->runWithCustomDispatcher(Object(Illuminate\Http\Request)) 
#7 C:\xampp\htdocs\proofofconcept\laravel\vendor\laravel\framework\src\Illuminate\Routing\Router.php(701): Illuminate\Routing\Route->run(Object(Illuminate\Http\Request)) 
#8 [internal function]: Illuminate\Routing\Router->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request)) 
#9 C:\xampp\htdocs\proofofconcept\laravel\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(141): call_user_func(Object(Closure), Object(Illuminate\Http\Request)) 
#10 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) 
#11 C:\xampp\htdocs\proofofconcept\laravel\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(101): call_user_func(Object(Closure), Object(Illuminate\Http\Request)) 
#12 C:\xampp\htdocs\proofofconcept\laravel\vendor\laravel\framework\src\Illuminate\Routing\Router.php(703): Illuminate\Pipeline\Pipeline->then(Object(Closure)) 
#13 C:\xampp\htdocs\proofofconcept\laravel\vendor\laravel\framework\src\Illuminate\Routing\Router.php(670): Illuminate\Routing\Router->runRouteWithinStack(Object(Illuminate\Routing\Route), Object(Illuminate\Http\Request)) 
#14 C:\xampp\htdocs\proofofconcept\laravel\vendor\laravel\framework\src\Illuminate\Routing\Router.php(628): Illuminate\Routing\Router->dispatchToRoute(Object(Illuminate\Http\Request)) 
#15 C:\xampp\htdocs\proofofconcept\laravel\vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php(214): Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request)) 
#16 [internal function]: Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http\{closure}(Object(Illuminate\Http\Request)) 
#17 C:\xampp\htdocs\proofofconcept\laravel\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(141): call_user_func(Object(Closure), Object(Illuminate\Http\Request)) 
#18 C:\xampp\htdocs\proofofconcept\laravel\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\VerifyCsrfToken.php(43): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) 
#19 C:\xampp\htdocs\proofofconcept\laravel\app\Http\Middleware\VerifyCsrfToken.php(17): Illuminate\Foundation\Http\Middleware\VerifyCsrfToken->handle(Object(Illuminate\Http\Request), Object(Closure)) 
#20 C:\xampp\htdocs\proofofconcept\laravel\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(125): App\Http\Middleware\VerifyCsrfToken->handle(Object(Illuminate\Http\Request), Object(Closure)) 
#21 C:\xampp\htdocs\proofofconcept\laravel\vendor\laravel\framework\src\Illuminate\View\Middleware\ShareErrorsFromSession.php(55): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) 
#22 C:\xampp\htdocs\proofofconcept\laravel\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(125): Illuminate\View\Middleware\ShareErrorsFromSession->handle(Object(Illuminate\Http\Request), Object(Closure)) 
#23 C:\xampp\htdocs\proofofconcept\laravel\vendor\laravel\framework\src\Illuminate\Session\Middleware\StartSession.php(61): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) 
#24 C:\xampp\htdocs\proofofconcept\laravel\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(125): Illuminate\Session\Middleware\StartSession->handle(Object(Illuminate\Http\Request), Object(Closure)) 
#25 C:\xampp\htdocs\proofofconcept\laravel\vendor\laravel\framework\src\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse.php(36): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) 
#26 C:\xampp\htdocs\proofofconcept\laravel\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(125): Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse->handle(Object(Illuminate\Http\Request), Object(Closure)) 
#27 C:\xampp\htdocs\proofofconcept\laravel\vendor\laravel\framework\src\Illuminate\Cookie\Middleware\EncryptCookies.php(40): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) 
#28 C:\xampp\htdocs\proofofconcept\laravel\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(125): Illuminate\Cookie\Middleware\EncryptCookies->handle(Object(Illuminate\Http\Request), Object(Closure)) 
#29 C:\xampp\htdocs\proofofconcept\laravel\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode.php(42): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) 
#30 C:\xampp\htdocs\proofofconcept\laravel\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(125): Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode->handle(Object(Illuminate\Http\Request), Object(Closure)) 
#31 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) 
#32 C:\xampp\htdocs\proofofconcept\laravel\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(101): call_user_func(Object(Closure), Object(Illuminate\Http\Request)) 
#33 C:\xampp\htdocs\proofofconcept\laravel\vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php(115): Illuminate\Pipeline\Pipeline->then(Object(Closure)) 
#34 C:\xampp\htdocs\proofofconcept\laravel\vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php(84): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter(Object(Illuminate\Http\Request)) 
#35 C:\xampp\htdocs\proofofconcept\laravel\public\index.php(53): Illuminate\Foundation\Http\Kernel->handle(Object(Illuminate\Http\Request)) 
#36 {main} 

EDIT: Я переехал мою конечную точку для загрузите его на другой контроллер, и теперь он работает нормально, однако он жалуется, что мой Input :: файл («doctorsnote») является nonobject:

[2015-05-15 11:35:20] local.ERROR: exception 'Symfony\Component\Debug\Exception\FatalErrorException' with message 'Call to a member function move() on a non-object' in C:\xampp\htdocs\proofofconcept\laravel\app\Http\Controllers\CalendarController.php:27 
Stack trace: 
#0 {main} 

EDIT: теперь у меня есть это для моей форме, но это не регистрирует, когда я нажимаю кнопку отправки, то POST не выполняется

<form id="logform" enctype="multipart/form-data" action="calendar" method="POST"> 
<select id='logoption'> 
<option value="0"> Select logtype </option> 
<?php 
//SQL in laravel style to get log types from database 
$logtypes = DB::table('time_log_types')->get();  
foreach ($logtypes as $logtype) 
{ 
echo ' <option value="'. $logtype->id . '">' . $logtype->logtype.'</option>'; 
} 
?> 
</select> 

<div id="illness" style="display:none"> 
<p>End date: <input type="text" id="enddate"></p> 
<input type="hidden" name="MAX_FILE_SIZE" value="30000" /> 
<p>Doctor's note: <input type="file" name="doctorsnote" id="doctorsnote"/></p>            
              </div>            

<input type="button" value="submit" id="submitbutton" style="display:none" /> 
<input type="hidden" name="_token" value="<?php echo csrf_token(); ?>"> 
</form> 
+0

Документация, ваш лучший друг http://laravel.com/docs/master/routing # csrf-protection –

+0

I прочитайте документацию там, но я действительно не знаю, что с этим делать, я, возможно, не упомянул об этом, но я полный новичок на всех этих методах, моя компания просто в основном дала мне задание использовать laravel (я когда-то делал некоторые исправления php для школьной стажировки, но это все) и все это самостоятельно, никто больше не имеет опыта с чем-либо, что я делаю –

+0

Вы видите несоответствие токенов, является проверкой CRSF, которую имеет laravel, в основном у вас есть чтобы включить токен в ваш запрос. Либо в заголовках, либо в форме, добавляя скрытый ввод. Прочтите раздел токена CRSF снова –

ответ

0

Я только что удалось загрузить файл: D Как я пошел об этом:

ШАГ 1: редактировать свою форму, как это: - Добавлена ​​ENCTYPE, добавил действие в моей форме, добавлен метод пост - добавлено скрытое поле для csrftoken - удалены все JavaScript, связанные с подачи моей формы (действительно не нужен этот вызов AJAX)

<form id="logform" enctype="multipart/form-data" action="calendar" method="post"> 
<select id='logoption'> 
<option value="0"> Select logtype </option> 
<?php 
//SQL in laravel style to get log types from database 
$logtypes = DB::table('time_log_types')->get(); 

foreach ($logtypes as $logtype) 
{ 
echo ' <option value="'. $logtype->id . '">' . $logtype->logtype.'</option>'; 
} 
?> 
</select> 

<div id="illness" style="display:none"> 
<p>End date: <input type="text" name="enddate" id="enddate"></p> 
<input type="hidden" name="MAX_FILE_SIZE" value="30000" /> 
<p>Doctor's note: <input type="file" name="doctorsnote" id="doctorsnote"/></p>            
</div>  
<input type="button" value="submit" id="submitbutton" style="display:none" onclick="submit()" /> 
<input type="hidden" name="_token" value="<?php echo csrf_token(); ?>"> 
</form> 

ШАГ 2: удалить Javascript

ШАГ 3: Перемещенные функцию загрузки на мой calendarController и изменил маршрут:

Route::post('calendar', '[email protected]'); 

Я больше ничего не менять (за исключением удалить весь Javascript функция)

и он работает как шарм, взял меня целый день, чтобы заставить его работать, но я думаю, неплохо для новичков: D

0

Очистить кеш браузера, включая файл cookie. Ctrl+Refresh страница формы. Повторите попытку.

EDIT: Просто введите этот элемент в свою форму.

<input type="hidden" name="_token" value="{{ csrf_token() }}">

+0

Я пробовал это уже, это не решает проблему, извините для позднего ответа я обедал с моим боссом –

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