2013-02-21 13 views
7

Tôi đã dành đôi khi cố gắng hiểu baseUrl là gì (từ việc học Zend Framework), nhưng thật đáng ngạc nhiên khi một tiện ích phổ biến như vậy không phải là một chuyên gia hay blogger đã cố gắng định nghĩa baseUrl để người học có ý tưởng về nó. Tất cả đều cho rằng bạn biết nó là gì và sau đó tiến hành lấy nó, mỗi người sử dụng phương pháp riêng của mình để đạt được kết quả của riêng mình. Từ những gì tôi đã đọc cho đến thời điểm này:Chính xác là một baseUrl

Một số người cho rằng đó là Trang chủ-Url, đó là những gì tôi tự nhiên nghĩ là (được ngụ ý từ tên), được truy cập bởi $_SERVER["HTTP_HOST"] hoặc $_SERVER["SERVER_NAME"]. dường như là thiểu số.

Một số người nghĩ nó là một trang hiện tại để được truy cập bởi $_SERVER["REQUEST_URI"] hoặc $_SERVER["PHP_SELF"] nối vào máy chủ tên

khi những người khác nghĩ rằng nó có thể là bất kỳ ở trên hoặc bất kỳ url cho rằng vấn đề (tốt, ít nhất đó là ấn tượng tôi nhận được), tùy thuộc vào cách người dùng muốn sử dụng nó.

Vì vậy, ai đó có thể vui lòng giải thích chính xác những gì một baseUrl là, mà không giả sử tôi cũng là "chuyên gia" và tại sao tôi có thể cần nó. Cảm ơn bạn.

EDIT: BaseUrl được cho là tự động được đặt trên hầu hết các dự án Zend, nhưng dường như không phải trong trường hợp của tôi. Ngay cả khi tôi làm một số echo $this->baseUrl() hoặc var_dump($this->baseUrl()), tôi chẳng nhận được gì cả. Tôi thực sự không biết tiện ích này là gì.

+0

baseurl xác định đường dẫn tuyệt đối tùy thuộc vào máy chủ của bạn. Bạn không cần phải thay đổi nó theo cách thủ công nếu máy chủ thay đổi. – ripa

Trả lời

17

Câu trả lời ngắn cho lý do tại sao bạn cần phải có một cơ sở baseUrl() là thế này:

Trường hợp ứng dụng được triển khai phải là một vấn đề cấu hình, không phải là một cor e application-functional issue

Trong nhiều trường hợp, thậm chí hầu hết các trường hợp, url cơ sở của ứng dụng sẽ đơn giản là $_SERVER['HTTP_HOST'] hoặc $_SERVER['SERVER_NAME'].

Nhưng đó không phải lúc nào cũng như vậy.

Ví dụ đơn giản nhất để xem xét là một trang web tiêu chuẩn mà có các trang thông thường:

  • http://example.com/
  • http://example.com/contact
  • http://example.com/about
  • // etc

Bây giờ bạn viết (hoặc mua hoặc tải xuống dưới dạng gói OSS) một ứng dụng blog mà bạn muốn triển khai dưới sự url:

http://example.com/blog

Blog có thể có liên kết như:

  • http://example.com/blog/post/my-post-slug
  • http://example.com/blog/categories/some-category
  • //etc

Tất cả những liên kết này cư trú dưới /blog.

Bản thân ứng dụng blog phải được quan tâm chỉ với các liên kết/trang/định tuyến bên trong blog. Mặc dù các mẫu blog của bạn có thể chứa các liên kết đầu trang/chân trang trở lại phần còn lại của trang web, phần còn lại của chức năng ứng dụng blog lõi không cần phải biết về phần còn lại của trang web của bạn. Bằng cách nào đó, ứng dụng blog cần biết rằng khi anh ta tạo liên kết đến các bài đăng trên blog và các danh mục blog và tất cả các trang liên quan đến blog khác của anh ấy, tất cả đều phải có tiền tố là http://example.com/blog.

Các giá trị $_SERVER['HTTP_HOST'] hoặc $_SERVER['SERVER_NAME'] không phản ánh thông tin môi trường/triển khai này. Định cấu hình (!) Ứng dụng với giá trị url cơ sở và sử dụng một số chức năng baseUrl() (tiêu thụ cấu hình này) khi tạo liên kết là cách tốt để giữ chức năng ứng dụng cốt lõi của bạn tập trung vào hoạt động kinh doanh của riêng mình chứ không phải trên các yếu tố triển khai bên ngoài .

+0

Cảm ơn @All. Nhưng baseUrl có được thiết lập tự động không? như được hỗ trợ bởi câu trả lời được chọn trên [chủ đề này] (http://stackoverflow.com/questions/5802501/how-to-set-baseurl?rq=1), nhưng khi tôi thực hiện một 'echo $ this-> baseUrl (); 'hoặc' var_dump ($ this-> baseUrl()); 'Nó không có gì cả. –

+0

Điều thú vị là, vào thời điểm này, câu trả lời được chấp nhận về câu hỏi đó không phải là bình chọn cao nhất. Thật vậy, khung sẽ cố gắng đoán baseUrl. Nhưng nó không phải luôn luôn đúng, đặc biệt là khi bạn triển khai trên một số con đường nghiêm ngặt dưới gốc của tài liệu công cộng của máy chủ hoặc có một cái gì đó bất thường trong các thiết lập máy chủ. Xem thuật toán phức tạp trong [Zend_Controller_Request_Http :: setBaseUrl()] (http://framework.zend.com/svn/framework/standard/trunk/library/Zend/Controller/Request/Http.php) –

2

Trang web của bạn được tạo thành một loạt các trang web. Mỗi trang web có một Trình định vị tài nguyên thống nhất đầy đủ (URL) giống như http://www.your.com/intro.htm. URL trang web của bạn thường sẽ bắt đầu bằng cùng một tập hợp các chữ cái, ví dụ: http://www.your.com/ trong trường hợp này. Tiền tố chung này là cái mà chúng tôi gọi là URL cơ sở của bạn.

Sử dụng URL cơ sở sẽ đơn giản hóa công việc của bạn vì bạn không cần phải xem hoặc nhập URL đầy đủ cho mỗi trang mà bạn muốn tham chiếu.

Hoặc

URL được gán cho một trang để chuyển đổi "URL tương đối" thành "URL tuyệt đối" bằng cách cho thêm một tên tài liệu hoặc gạch chéo/

Để hiểu url zend vui lòng tham khảo này link