2015-10-23 28 views
5

Tôi muốn xây dựng một thanh progess với trạng thái của tập lệnh php của tôi. Tôi đã đọc rằng nó có thể được thực hiện bằng cách sử dụng session.upload_progress.Laravel 5.1 sử dụng session.upload_progress

Tôi đang sử dụng laravel Homestead và trong php.ini tất cả các yêu cầu đang hoạt động.

Đây là html của tôi

{!! Form::open(['route' => 'gebruikers_upload', 'class' => 'form-horizontal import', 'enctype' => 'multipart/form-data', 'target' => 'hidden_iframe']) !!} 
          <input type="hidden" value="myForm" name="{{ini_get("session.upload_progress.name")}}"> 
          <input type="file" name="file" id="the-file"/> 
          <button class="btn btn-sm btn-info btn_import" type="submit">Importeer</button> 
          <button class="btn btn-sm btn-danger" type="button">Cancel</button> 
         {!! Form::close() !!} 
         {{--End Form--}} 

         <iframe id="hidden_iframe" name="hidden_iframe" src="about:blank"></iframe> 

         <div class="progress"> 
          <div class="progress-bar progress-bar-striped active" role="progressbar" aria-valuenow="25" 
            aria-valuemin="0" aria-valuemax="100" style="width: 45%"> 
           <span class="">45% Complete</span> 
          </div> 
         </div> 

Khi submiting te tuyến đường là:

Route::get('dashboard/gebruikers/upload_status', '[email protected]'); 

Và trong UserController điều khiển trong phương pháp uploadStatus tôi có điều này

public function uploadStatus(Request $request) 
{ 
    session_start(); 

    echo '<pre>'; 
     print_r($_SESSION); 
    echo '</pre>'; 
} 

Nhưng nó luôn hiển thị một mảng trống. Và khi tôi sử dụng mã này

$data = $request->session()->all(); 

    echo '<pre>'; 
    print_r($data); 
    echo '</pre>'; 

Nó trả về này

Array 
(
    [_token] => jFkleI9kIZJiZP3pEARx0hDrHtsynPmuGkse97nT 
    [_previous] => Array 
     (
      [url] => http://localhost.dev:8000/dashboard/gebruikers/upload_status 
     ) 

    [flash] => Array 
     (
      [old] => Array 
       (
       ) 

      [new] => Array 
       (
       ) 

     ) 

    [login_82e5d2c56bdd0811318f0cf078b78bfc] => 1 
) 

Nhưng không có thông tin về tiến trình cập nhật.

Làm thế nào tôi có thể sử dụng điều này với laravel 5,1

Trả lời

1

Laravel Documentation có tất cả các phương pháp bạn cần phải gây rối với phiên.

$request->session()->put('key', 'value'); 

Bạn chỉ cần đặt bất kỳ thứ gì bạn muốn vào phiên như thế này.

Là viết tắt của trợ giúp Laravel cung cấp cho bạn chức năng trợ giúp session(). Trong đó chấp nhận một mảng "cặp giá trị khóa" để đặt giá trị hoặc chỉ một khóa để truy lục bất kỳ giá trị nào từ phiên.

3

Tôi đã gặp phải điều này khi cố gắng giải quyết vấn đề tương tự: cập nhật tiến độ của quy trình chạy dài ở phía máy khách.

Sự cố xảy ra với điều này: khi bạn thực hiện yêu cầu tới máy chủ, giá trị phiên không được ghi vào lưu trữ phiên cho đến khi phản hồi được trả về cho máy khách. Về cơ bản, quá trình này trông như thế này:

 CLIENT   |  SERVER 
         |    . 
send request  ----|----> start processing 
         |    . 
         |    . 
         |    . 
         |  finish processing 
         |  write session values 
receive response <----|---- return response 

gì bạn đang làm một cái gì đó như thế này là:

 CLIENT   |  SERVER 
         |    . 
send request  ----|----> start processing 
         |    . 
         |  (update session) 
         |    . 
         |  (update session) 
         |    . 
         |  (update session) 
         |    . 
         |  finish processing 
         |  write session values 
receive response <----|---- return response 

Nhưng những (update session) cuộc gọi trên máy chủ sẽ được bỏ qua - chúng không thực sự bị ghi vào cửa hàng phiên. Vì vậy, khi khách hàng thực hiện một cuộc gọi đến tuyến đường của bạn để yêu cầu giá trị phiên cho tiến trình, nó không nhận được bất cứ điều gì.

Giải pháp rất đơn giản: viết giá trị tiến trình ở nơi khác. Một thời gian dài trước đây tôi đã giải quyết điều này bằng cách viết giá trị vào một tập tin bằng cách sử dụng file_put_contents. Nếu tôi đã làm nó ngày hôm nay tôi có lẽ sẽ nhìn vào một máy chủ redis cho hiệu quả tốt hơn.

Một điều cần lưu ý, tuy nhiên: nếu bạn chọn viết giá trị ở nơi khác, bạn cần phải có cách nào đó để kết hợp giá trị với phiên. Nếu không, những người dùng khác sẽ ghi đè giá trị của bạn.Đối với một dự án đơn giản, tôi có thể sử dụng giá trị ID của người dùng (giả sử rằng họ sẽ chỉ xử lý một thứ tại một thời điểm).

+0

Đúng vậy, nếu bạn sử dụng gói chiếu sáng/phiên bên ngoài Laravel, bạn sẽ cần phải gọi phương thức 'save' trên phiên bản SessionManager để lưu các cập nhật vào biến' $ _SESSION'. –

Các vấn đề liên quan