9

Tôi chỉ đọc bài hướng dẫn về Zrab2 của Akakat Rob Allen (http://akrabat.com/wp-content/uploads/Getting-Started-with-Zend-Framework-2.pdf) về cách chèn các phụ thuộc vào công cụ của bạn như, tiêm vào bộ điều hợp bảng của bạn vào các lớp bảng của bạn.Zend Framework 2 - DI và phải tiêm bộ chuyển đổi bảng vào bảng ... tẻ nhạt?

này có vẻ là cách tôi phải làm điều đó:

 array(
      'Application\Model\DbTable\UserTable', 
     ) => array(
      'parameters' => array(
       'config' => 'Zend\Db\Adapter\PdoMysql', 
      ) 
     ), 

     array(
      'Application\Model\DbTable\UserProfileTable', 
     ) => array(
      'parameters' => array(
       'config' => 'Zend\Db\Adapter\PdoMysql', 
      ) 
     ), 

Ok đó là khá mát mẻ nhưng tôi đã có khoảng 84 bảng nên tôi sẽ phải thêm mỗi trong số này và nói rằng Tôi muốn PdoMySQL tiêm vào tất cả chúng. Có cách nào thích hợp để làm điều này như chỉ định toàn bộ thư mục DbTable của tôi? Thậm chí không hoạt động:

 array(
      'Application\Model\DbTable\UserTable', 
      'Application\Model\DbTable\UserProfileTable' 
     ) => array(
      'parameters' => array(
       'config' => 'Zend\Db\Adapter\PdoMysql', 
      ) 
     ), 

Bất kỳ ai khác làm điều này và tìm ra giải pháp tốt hơn?

Xin cảm ơn, Dom

+0

Chỉ cần nhìn vào nơi bạn xác định mảng (và sử dụng mảng cho khóa), tôi đã bị ấn tượng rằng các khóa mảng chỉ có thể là chuỗi hoặc số nguyên trong PHP. Ai đó có thể sửa tôi nếu điều này sai? – bearver

+0

Vâng có ý nghĩa: D Tôi đã thử nhìn vào tiêm DB Adapter trực tiếp vào AbstractTable nhưng nó là một lớp trừu tượng và không hoạt động. Sau đó tôi đã thử đặt nó vào Zend \ Db \ Table \ Table và sau đó mở rộng này nhưng một lần nữa mà không làm việc ... Có phải là một cách tốt hơn xung quanh này hơn chỉ định cùng một mã 90 lần –

Trả lời

1

Câu hỏi của bạn là câu hỏi hay và tôi đồng ý rằng đây là trường hợp tiêm phụ thuộc KHÔNG có ý nghĩa. Tôi chưa duyệt qua API ZF2, liệu họ có hoàn toàn từ bỏ khả năng liên kết bộ điều hợp ở cấp kết nối, thay vì cấp bảng không?

Trong lớp cơ sở dữ liệu của tôi, tôi sử dụng tệp yaml để lưu trữ cài đặt kết nối; tên người dùng, mật khẩu, bộ chuyển đổi, v.v. Tôi đã thực hiện nó ở định dạng có thể được chuyển thẳng đến Zend_Config, sau đó có thể được chuyển đến lớp Zend_Db.

// Entry in connection.yml 
database: 
    adapter: Pdo_Mysql 
    params: 
    host:  myhost 
    dbname: mydatabase 
    username: myusername 
    password: mypassword 

// Parse yaml file to get above snippet in an array ($dbConnectionparams) 

$config = new Zend_Config($dbConnectionParams); 

$dbo = Zend_Db::factory($config->database); 

Bây giờ, nếu cần thay đổi bộ điều hợp cho kết nối cơ sở dữ liệu, tôi chỉ cần thay đổi bộ điều hợp ở một vị trí, tệp connection.yml.

Ngoài ra, tôi tin rằng bạn có thể lưu trữ loại dữ liệu kết nối này ở nhiều định dạng khác (xml, v.v ...).

+0

Tôi nghĩ rằng tôi có thể đã vấp ngã khi câu trả lời! Có vẻ như EvanDotPro đã tạo ra một lớp 'DiPdoMysql' trông giống như một phần mở rộng của PdoMysql cho Di. https://github.com/EvanDotPro/EdpUser DiPdoMysql nằm trong https://github.com/EvanDotPro/EdpCommon/tree/master/src/Zend/Db/Adapter –

+0

@DominicWatson: Thú vị, có vẻ như ZF2 nên supoort loại hành vi này một cách tự nhiên. –

+0

Aye, tôi nghĩ rằng tôi nhớ đọc rằng lớp DiPdoMysql của ông đã có cho đến khi Zend \ DB đã được viết lại hoàn toàn: D –

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