2013-08-14 30 views
5

Tôi làm cách nào để phát hiện xem người dùng có đang trên trang chủ của trang web của tôi bằng CakePhp không?Làm thế nào để phát hiện xem trang hiện tại có phải là trang chủ với CakePhp không?

Tôi có thể sử dụng $this->webroot không?

Mục tiêu là chỉ thực hiện điều gì đó nếu trang hiện tại là trang chủ.

+0

Tôi không biết về CakePHP nhưng '__file__' sẽ đầu ra đường dẫn của tập tin và bạn có thể kiểm tra nếu đường dẫn os giống như đường dẫn của trang chủ .. –

Trả lời

10

Đơn giản chỉ cần bạn có thể thử này:

if ($this->request->here == '/') { 
     // some code 
} 

Ngoài ra nó là tốt để đọc phần này của documentation:

Bạn có thể sử dụng CakeRequest đến nội quan nhiều điều về yêu cầu . Ngoài các thiết bị dò tìm, bạn cũng có thể tìm hiểu thông tin khác từ các thuộc tính và phương pháp khác nhau.

$this->request->webroot contains the webroot directory. 
$this->request->base contains the base path. 
$this->request->here contains the full address to the current request 
$this->request->query contains the query string parameters. 
+1

Chính xác những gì tôi đang tìm kiếm! Cảm ơn bạn! – Dacobah

+0

Cảm ơn bạn! Tôi đã phát hiện một biến mới) –

+1

Điều này sẽ không hoạt động trong thư mục con, ví dụ: 'http: // localhost/cakephp /'. Trong trường hợp đó bạn có thể thử [answer] này (http://stackoverflow.com/a/23868165/1787600) –

0

Bạn có thể sử dụng $ this-> request-> truy vấn [ 'page'] để xác định bạn đang ở đâu,

if ($this->request->query['page'] == '/'){ 
    //do something 
} 

Edit:

séc $ this-> yêu cầu đối tượng sử dụng debug echo ($ this-> request), nó chứa nhiều thông tin bạn có thể sử dụng. Dưới đây là một ví dụ về những gì bạn nhận được:

object(CakeRequest) { 
    params => array(
     'plugin' => null, 
     'controller' => 'pages', 
     'action' => 'display', 
     'named' => array(), 
     'pass' => array(
      (int) 0 => 'home' 
     ) 
    ) 
    data => array() 
    query => array() 
    url => false 
    base => '' 
    webroot => '/' 
    here => '/' 
} 
+0

Tôi đã thử nó nhưng nó không hoạt động. Tôi cho rằng $ this-> request-> query ['page'] có nghĩa là bạn có một chuỗi truy vấn. Nhưng url của tôi giống như www.example.com hơn www.example.com?page = ... – Dacobah

+0

Xem chỉnh sửa của tôi, có thể bạn sẽ tìm thấy những gì bạn cần trong $ this-> đối tượng yêu cầu – kaklon

0

Giả sử bạn đang đi để làm điều gì đó từ AppController, nó là tốt nhất để xem nếu cặp điều khiển/hành động hiện nay là một trong những bạn định nghĩa như là "trang chủ" (như Bánh có thể định tuyến người dùng ở bất kỳ nơi nào từ tuyến đường '/' và bạn có thể vẫn muốn kích hoạt logic khi hành động được gọi trực tiếp với URI /controller/action đầy đủ và không chỉ trên /). Trong AppController bạn chỉ cần thêm một tấm séc:

if ($this->name == 'Foo' && $this->action == 'bar') { 
    // Do your stuff here, like 
    echo 'Welcome home!'; 
} 

Bằng cách đó nó sẽ kích hoạt bất cứ khi nào hành động bar được yêu cầu từ FooController. Bạn rõ ràng có thể đặt logic này vào chính hành động của bộ điều khiển cụ thể (và điều đó có thể có ý nghĩa hơn vì nó ít chi phí hơn).

0

Bạn có thể nhận được nó đúng cách bằng cách kiểm tra chống params như dưới đây:

if($this->params['controller']=='homes' && $this->params['action']=='index')

theo cách này bạn có thể kiểm tra bất kỳ trang nào của CakePHP vào xem bên

4

Bạn có thể tìm thấy nó bằng cách so sánh trang hiện tại với webroot hoặc cơ sở

if ($this->here == $this->webroot){ // this is home page } 

HOẶC

if ($this->here == $this->base.'/'){ // this is home page } 
0

Nếu trang chủ của bạn là home.ctp như mentionned bởi ước CakePHP.Trong PagesController, bạn có thể thay đổi chức năng hiển thị để trông giống như:

(mã bổ sung bắt đầu từ những nhận xét/* Mã Tuỳ chỉnh bắt đầu * /)

public function display() 
{ 
    $path = func_get_args(); 

    $count = count($path); 
    if (!$count) { 
     return $this->redirect('/'); 
    } 
    $page = $subpage = null; 

    if (!empty($path[0])) { 
     $page = $path[0]; 
    } 
    if (!empty($path[1])) { 
     $subpage = $path[1]; 
    } 
    /* Custom code start*/ 
    if("home"==$page){ 
     // your code here 
    } 
    /* Custom code end*/ 
    $this->set(compact('page', 'subpage')); 

    try { 
     $this->render(implode('/', $path)); 
    } catch (MissingTemplateException $e) { 
     if (Configure::read('debug')) { 
      throw $e; 
     } 
     throw new NotFoundException(); 
    } 
} 
Các vấn đề liên quan