2012-01-06 26 views
7

Có thể hiển thị thông báo flash trong Symfony 2 mà không cần chuyển hướng không? Hoặc chỉnh sửa các tệp lõi trong một tệp khác possible solution trên các nhóm trên google?Hiển thị tin nhắn flash mà không cần chuyển hướng (ví dụ như chuyển tiếp). Tin nhắn được hiển thị hai lần

//Symfony\Component\HttpFoundation\Session 
public function setFlash($name, $value, $persist = true) 
{ 
    if (false === $this->started) { 
     $this->start(); 
    } 
    $this->flashes[$name] = $value; 
    if($persist) { 
     unset($this->oldFlashes[$name]); 
    } 
    else { 
     $this->oldFlashes[$name] = $value; 
    } 
} 

CẬP NHẬT

Oh thực sự tôi nhận thấy nếu tôi chỉ sử dụng một tiền đạo, tin nhắn flash sẽ hiển thị, nhưng nó vẫn sẽ hiển thị theo yêu cầu tiếp theo

+0

Bạn có nghĩa là hiển thị đèn flash mà không làm mới trang không? hoặc bạn có nghĩa là hiển thị một đèn flash và làm mới (giống như nó không chuyển hướng) trang? – swiecki

+1

@swiecki, Thông thường, thông báo flash được đặt sau đó người dùng được chuyển hướng. Nhưng nếu tôi không chuyển hướng người dùng, như tôi chỉ sử dụng một chuyển tiếp hoặc chỉ muốn hiển thị một thông báo trong yêu cầu hiện tại? –

+1

sử dụng javascript – Dau

Trả lời

7

tại sao sử dụng nhấp nháy nếu bạn không muốn họ được tiếp tục cho đến khi tiếp theo requ est?

Bạn không thể tìm thấy các cách khác để hiển thị phản hồi như thông số mẫu?

Nếu không, bạn có thể thêm này trong các mẫu của bạn (theo bạn đang hiển thị nhấp nháy như dưới đây):

{% if app.session.hasFlash('notice') %} 
<div class="flash-notice"> 
    {{ app.session.flash('notice') }} 
    {{ app.session.removeFlash('notice') }} 
</div> 
{% endif %} 

Vì vậy mà bất kỳ mẫu nào có hiển thị những chiếc đèn flash trước khi chuyển hướng sẽ loại bỏ chúng khỏi phiên trước khi trả lại phản hồi . Tôi nghĩ rằng đó là giải pháp tốt hơn cuối cùng.

3

tôi sẽ nói một cách chung chung, bởi vì bạn muốn cái gì đó không phải là một tiêu chuẩn sẵn sàng.

Tại thời điểm này, thông báo flash của Symfony xuất hiện sau yêu cầu, theo cách này và để bảo toàn, bạn cần tìm một phương án thay thế, sử dụng cuộc gọi ajax.

Bạn cần gọi một tập lệnh hành động bằng cách sử dụng yêu cầu ajax, tuần tự hóa dữ liệu của biểu mẫu, nhận được thông báo trả về và sau đó hiển thị nó theo cách máy chủ của bạn tốt hơn.

tôi đã sử dụng http://jquery.bassistance.de/message/demo/ cùng với mẫu gọi jquery này trong một số dự án, công trình tốt:

$.post("/product/saveAjax", { $("#product").serialize() }, 
function(data){ 
    $().message(data.message); 
}, "json"); 

Sự trở lại từ tiết kiệm một mục với ajax là khác nhau, trong trường hợp này Tôi đang mã hóa các dữ liệu sử dụng JSON, như vậy, nếu bạn muốn để phí phạm một hành động mà bạn có thể tiêm biến hơn trong mảng JSON, thao tác chúng bên trong function (data) {...}

Hy vọng rằng sẽ giúp

1

Tin nhắn flash đã được tạo để sống qua chuyển hướng mà bạn thường làm sau khi gửi biểu mẫu thành công. Đó là lý do tại sao họ sống cho 2 yêu cầu.

Nếu bạn muốn quản lý thông báo người dùng trong ứng dụng của mình, hãy đặt trình điều khiển quản lý thông báo khối TWIG trong bố cục của bạn. Khối này có thể nhúng tin nhắn flash VÀ những thông báo này bạn xử lý với bộ điều khiển. Bạn sẽ phải đặt chúng trong phiên của bạn, loại bỏ chúng trong NotificationController của bạn và nó không sao ...

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