2010-08-19 36 views
6

Chúng tôi có một sản phẩm được phát triển trong khung công tác PHP Symfony. Chúng tôi có vài khách hàng ngay bây giờ cho người mà chúng tôi đang duy trì cơ sở mã và cơ sở dữ liệu khác nhau (MySql).Cấu hình dự án symfony cho nhiều tên miền

Họ truy cập vào cơ sở mã tương ứng của họ sử dụng tên miền phụ như client1.myproduct.com và client2.myproduct.com

Bây giờ chúng tôi muốn thực hiện một cơ sở mã duy nhất cho cả khách hàng và chỉ giữ các tập tin đó là khác nhau (trong điều khoản logic) cho cả hai người trong số họ trong các tên miền phụ riêng biệt.

Vì vậy, cả hai tên miền phụ sẽ trỏ đến cùng một cơ sở mã nhưng sẽ truy cập tệp từ tên miền phụ tương ứng của chúng bất cứ khi nào được yêu cầu, bất cứ khi nào logic khác nhau đối với một số tính năng cho cả khách hàng.

Có ai có thể gợi ý cách tốt nhất để thực hiện điều này là gì?

Trả lời

4

sites: [foo.com, bar .co.uk, www.mike.es]

// index.php 
require_once(dirname(__FILE__).'/../config/ProjectConfiguration.class.php'); 

// get the domain 
$domain = $_SERVER['SERVER_NAME']; 

// get rid of www, com, es etc ... 
foreach(array('www.', '.com', '.es', '.co.uk') as $crap) { 
    $domain = str_replace($crap, '', $domain); 
} 
$confs = array(
    'foo' => 'somefoo', 
    'bar' => 'somebar', 
    'waz' => 'andwazconfig' 
); 
$cfg = (!empty($confs[$domain])) 
    ? $confs[$domain] 
    : 'default'; 

$configuration = ProjectConfiguration::getApplicationConfiguration($cfg, 'prod', false); 

sfContext::createInstance($configuration)->dispatch(); 

// End of index.php 

Hope this helps

+0

Tuyệt vời, tôi cũng đã suy nghĩ để sử dụng configs như thế này và bạn vừa khẳng định nó cho tôi. Tôi thích rằng phương pháp này cho phép mỗi ứng dụng nghĩ rằng đó là chỉ một trong khi làm cho nó hoàn toàn cấu hình cho mỗi trang web. – Ryall

0

Tôi đã mô tả việc sử dụng tên miền phụ động trong Symfony here bằng sfDomainRoutePlugin.

Tuy nhiên, bạn sẽ cần viết lại nhiều ứng dụng hiện có của mình để hỗ trợ nhiều ứng dụng trong cùng một ứng dụng và bạn cũng phải hợp nhất hai cơ sở dữ liệu cũ.

0

Tôi đã yêu cầu cùng một thông tin và có cơ hội nhận phản hồi của mike và fabien. Dưới đây là chi tiết:

Đối với một logic với các tên miền phụ: http://trac.symfony-project.org/wiki/HowToDoMultipleSitesWithSingleCore

Nhiều Trang web Dựa trên cấu hình giống hệt Đây có thể là một đề tài lạ, nhưng tôi muốn cấu hình truy cập của chúng tôi vào các tên miền phụ, tất cả với truy cập SSL. Chúng tôi cần các trang web khác nhau vì SSL buộc các miền ảo dựa trên IP, có nghĩa là các gốc tài liệu khác nhau đối với chúng tôi. Chẳng hạn như:

• www.mydomain.com • admin.mydomain.com • parents.mydomain.com Tuy nhiên, những đều trang web với schema lõi tương tự và plugins. Ưu điểm của cấu hình này là:

• tập tin mô hình chung: Tất cả các lớp XxxPeer sẽ được liên kết trên các ứng dụng Nhược điểm:

• Bây giờ bạn có 2 n khác nhau cache/nhật ký để theo dõi. Nếu bạn nhìn vào một cấu trúc thư mục Symfony điển hình, nó có thể được chia tối đa hai nhóm loại:

• Thư mục Common: ◦batch ◦config ◦data ◦doc ◦lib ◦plugins ◦test • ứng dụng Thư mục cụ thể: ◦apps ◦cache ◦log ◦web Dưới đây là các bước tôi đã:

• Phát triển www.yourdomain.com sc hema và trang web. Khi điều này bắt đầu đến với nhau, bạn có thể bắt đầu phát triển các trang web bổ sung. • Trong trang mới, liên kết tượng trưng cho Thư mục chung • Trong trang mới, tạo Thư mục ứng dụng cụ thể ◦ LƯU Ý: Trong thư mục web, bạn có thể cần sao chép một số nội dung gốc (css, js và. htaccess tập tin đến tâm). Giữ điều này trong tâm trí của bạn khi bạn bắt đầu để đưa lên các trang web mới. • Chạy lệnh symfony fix-perms ◦LƯU Ý: Đối với tôi, Virtualmin tạo các trang mới này bằng tên người dùng mới. Bạn sẽ phải đảm bảo rằng tất cả các thư mục ứng dụng cụ thể được sở hữu bởi tên người dùng đó, vì vậy các lệnh xóa bộ nhớ cache và các lệnh ghi nhật ký của bạn hoạt động. • Bây giờ, bạn đã cấu hình một dự án. Bạn bắt đầu bằng cách làm: Ứng dụng ◦symfony MYAPP mô-đun ymsymfony MYAPP MYMODULE ◦ ... • Bây giờ bạn sẽ thấy rằng ứng dụng của bạn/MYAPP/modules/MYMODULE đã được tạo và bạn có toàn quyền truy cập vào toàn bộ cơ sở dữ liệu

Đây là fabien liên quan đến một logic với tên miền khác nhau: client1.com client2.com sử dụng cùng một ứng dụng.

Đối với một logic với các miền khác nhau: "Bạn có thể trỏ tất cả vào cùng một bộ điều khiển trước, sau đó sử dụng bộ lọc hoặc lớp cha hành động để thực hiện những việc như thay đổi mẫu trang web, v.v. Mỗi miền có thể có ứng dụng riêng, nhưng phần lớn logic nên được triển khai trong các plugin, vì vậy chúng có thể được bật cho từng tên miền/ứng dụng cần chúng và chia sẻ theo yêu cầu. Tôi cần bao nhiêu mã cho mỗi ứng dụng, tôi đoán, trên các trang web thực sự khác nhau như thế nào. "

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