Điểm:1

Tôi có thể sử dụng dịch vụ phiên trực tiếp thay vì thông qua yêu cầu không?

lá cờ co

Các Tài liệu Drupal về phiên đề cập rằng các phiên có thể được truy cập thông qua đối tượng Yêu cầu:

Dữ liệu phiên được truy cập thông qua \Symfony\Component\HttpFoundation\Request::getSession() phương pháp mà trả về một thể hiện của \Symfony\Component\HttpFoundation\Session\SessionInterface. nhiều nhất các phương thức quan trọng trên SessionInterface là set(), get(), và remove().

Tuy nhiên tôi cũng đã phát hiện ra có một dịch vụ phiên.

Trong một lớp mà tôi cần sử dụng phép nội xạ phụ thuộc và theo mặc định, tôi không có quyền truy cập vào đối tượng Yêu cầu, tôi vẫn cần truy cập phiên thông qua yêu cầu hay tôi có thể sử dụng trực tiếp không? Thay vào đó, tải Yêu cầu và sau đó truy cập phiên có cảm giác như thêm chi phí hoạt động.

Tôi đã thử mã bên dưới, mã này có vẻ hoạt động tốt. Vậy thì tại sao hầu hết các ví dụ và thậm chí cả tài liệu vẫn thể hiện cách Yêu cầu? Tôi đang thiếu thứ gì đó hay có rủi ro trong phương pháp này không?

lớp MyForm mở rộng FormBase {

  /**
   * Phiên.
   *
   * @var \Symfony\Component\HttpFoundation\Session\Session
   */
  phiên $ được bảo vệ;

  /**
   *
   * @param \Symfony\Component\HttpFoundation\Session\Session $session
   * Phiên.
   */
  hàm công khai __construct($session) {
    $this->session = $session;
  }

  /**
   * {@inheritdoc}
   */
  tạo hàm tĩnh công khai (ContainerInterface $container) {
    trả về tĩnh mới (
      $container->get('session')
    );
  }

  hàm somefunction() {
    $this->session->get('value');
    $this->session->set('value', 'somevalue');
  }

}
Điểm:0
lá cờ cn

... có rủi ro trong phương pháp này không?

Nếu bạn có nhiều yêu cầu, bạn có thể nhận được đối tượng phiên sai. Drupal đã chuyển nhiều thứ ra khỏi đối tượng yêu cầu, như định tuyến và thậm chí cả thông tin đường dẫn, nhưng họ không triển khai dịch vụ phiên xếp chồng và thay vào đó giữ đối tượng phiên trong ngăn xếp yêu cầu.

Nếu bạn muốn tiêm dịch vụ này thì đã có một thuộc tính trong FormBase với các phương thức getter và setter.

Điều này có hiệu quả hay không (xem các nhận xét ở đầu lớp):

$session = $this->getRequest()->getSession();
Neograph734 avatar
lá cờ co
Cảm ơn, tôi không biết rằng Biểu mẫu đã có một phương thức để truy cập yêu cầu; đó rõ ràng là cách sạch nhất. Tôi vẫn chưa hoàn toàn hiểu làm thế nào có thể có nhiều phiên hơn cho một người dùng, tôi muốn nói rằng tất cả các yêu cầu đều là một phần của cùng một phiên. Tuy nhiên, tôi có thể hiểu rằng các tab thứ hai và yêu cầu AJAX có thể thay đổi nội dung của phiên.
4uk4 avatar
lá cờ cn
Ví dụ: trong một thử nghiệm, bạn có thể mô phỏng một phiên hoặc một mô-đun khác có thể chạy biểu mẫu của bạn trong một yêu cầu phụ với một phiên khác với yêu cầu chính.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.