2013-08-14 20 views
5

Jak mogę sprawdzić, czy użytkownik jest na stronie głównej mojej witryny z CakePhp?Jak wykryć, czy bieżąca strona jest stroną główną z CakePhp?

Czy mogę użyć $this->webroot?

Celem jest zrobienie czegoś tylko wtedy, gdy bieżąca strona jest stroną domową.

+0

nie wiem o CakePHP ale '__file__' będzie wypisz ścieżkę pliku i sprawdź, czy ścieżka jest taka sama jak ścieżka strony głównej. –

Odpowiedz

10

prostu można spróbować to:

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

Również dobrze jest przeczytać tę część documentation:

Można użyć CakeRequest do introspekcji różne rzeczy o zamówienie . Poza wykrywaczami można również znaleźć inne informacje z różnych właściwości i metod.

$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

Dokładnie to, czego szukałem! Dziękuję Ci! – Dacobah

+0

Dziękujemy! Odkryłem nową zmienną) –

+1

To nie działa w podfolderze, np. 'http: // localhost/cakephp /'. W takim przypadku możesz spróbować tego [odpowiedź] (http://stackoverflow.com/a/23868165/1787600) –

0

Można użyć $ this-> request-> query [ 'strona'], aby określić, gdzie jesteś,

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

Edit:

check $ this-> Obiekt żądania za pomocą echa debug ($ this-> request), zawiera wiele informacji, których możesz użyć. Oto próbka tego, co można dostać:

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

Próbowałem, ale to nie działa. Przypuszczam, że $ this-> request-> query ['page'] oznacza, że ​​masz kwerendę. Ale mój URL jest bardziej podobny do www.example.com niż www.example.com?page = ... – Dacobah

+0

Zobacz moją edycję, prawdopodobnie znajdziesz to, czego potrzebujesz w $ this-> request object – kaklon

0

Zakładając masz zamiar zrobić coś z AppController, to najlepiej, aby zobaczyć czy obecna para kontroler/akcja jest jeden zdefiniować jako „głównej” (jak ciasto może skierować użytkownika w dowolne miejsce z trasy "/" i prawdopodobnie nadal chcesz, aby logika była uruchamiana, gdy akcja jest wywoływana bezpośrednio z pełnym identyfikatorem URI /controller/action, a nie tylko na). W swojej AppController wystarczy dodać należy sprawdzić:

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

ten sposób będzie to powodować, gdy działanie bar żąda od FooController. Oczywiście można również umieścić tę logikę w samej akcji kontrolera (i może to mieć więcej sensu, ponieważ jest mniejszy narzut).

0

Można dostać go poprawnie, sprawdzając przed params jak poniżej:

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

W ten sposób można sprawdzić na dowolnej stronie CakePHP na widok z boku

4

Można znajdź go, porównując obecną stronę z webroot lub bazą

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

LUB

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

Jeśli strona główna jest home.ctp jak wymieniono w konwencji CakePHP.W PagesController można zmienić funkcję wyświetlania wyglądać:

(dodany kod zaczyna się od komentarza/* początek kodu klienta * /)

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(); 
    } 
}