1

Temat: Dostęp do funkcji w kontrolerze głównym

witam,

mam pewien banalny problem.
nie wiem w jaki sposób dostać się w widoku lub kontrolerze do funkcji znajdującej się w app_controller.php

Próbowałem metodą prób i błędów

$this->nazwa_funkcji();

Controller->nazwa_funkcji();

parent::nazwa_funkcji();

Controller::nazwa_funkcji();

zadne nie dziala. jak wywołać tą funkcję?

pozdr.

2

Odp: Dostęp do funkcji w kontrolerze głównym

hmmm a czemu chcesz to zrobic? to raczej niezgodne z MVC - mozesz opisac co robi ta funkcja?

3

Odp: Dostęp do funkcji w kontrolerze głównym

funkcja ta wyglada tak

function international_paranoid($string, $allowed = array()) {
        $allow = null;
        if (!empty($allowed)) {
            foreach ($allowed as $value) {
                $allow .= "\\$value";
            }
        }
        
        if (is_array($string)) {
            foreach ($string as $key => $clean) {
                $cleaned[$key] = preg_replace("/[^{$allow}\p{L}0-9]/u", '', $clean);
            }
        } else {
            $cleaned = preg_replace("/[^{$allow}\p{L}0-9]/u", '', $string);
        }
        return $cleaned;
    }

generlanie wykorzystalbym Inflector:slug, ale "psuje" mi polskie znaki. robi cos takiego "m�-�czyzn.html" zamiast "mezczyzn.html"

4

Odp: Dostęp do funkcji w kontrolerze głównym

niezgodne jest wywolywanie metody kontrolera w widoku, natomiast w innym kontrolerze do funkcji zdefiniowanej w app_controller odnosisz sie tak:

$this->nazwa_funkcji();

przy czy jesli jest to funkcja pomocnicza to warto ja poprzedzic podkresleniem - wtedy nie jest widoczna z poziomu przegladarki:

$this->_nazwa_funkcji();

5

Odp: Dostęp do funkcji w kontrolerze głównym

z tego co widze to jest zwykla funkcja operujaca na stringach, wiesz co mozesz zrobic - wrzuc sobie w /app/config jakis pliczek np funkcje_pomocnicze.php

i zaincluduj go w bootstrap.php :

include_once('funkcje_pomocnicze.php');

wtedy do takich funkcji mozesz odnosic sie w calej aplikacji (w kontrolerach, widokach, modelach).

Przy czym ta metoda postepowania dotyczy glownie takich funkcji jak Twoja.

Pozdrawiam

Ostatnio edytowany przez tomay7 (2009-08-03 15:42:54)

6

Odp: Dostęp do funkcji w kontrolerze głównym

Hi,

Jezeli slug ma byc tworzony z wartosci pola modelu, to wrzucasz do app_model metode ktora najpierw zamieni polskie znaki diakrytyczne ( ą ... ę ....) na ich lacinskie odpowiedniki, potem uzywasz w modelu inflectora.

Mozesz albo stworzyc metode ktora bedziesz wywolywac z kontrolera ($this->Model->findAllMyrecords()) albo dodac callback afterFind
ktory doda do kazdego rekordu nowy klucz powiedzmy $results['Model']['slug']  = inflector::slug($this->strToLatin($results['Model']['field'])); gdzie $this->strToLatin - Twoja metoda z AppModel ktora podmienia znaki.

Jezeli potrzbujesz tego w kilku modelach, to mozesz stworzyc behaviora ktory bedzie to robic automatycznie.


Jezeli string z ktorego chesz zrobic slugapochodzi z bazy najlpeiej to zrobic w modelu, kontroler to srednio wygodne rozwiazanie - wystraczy ze odwolasz sie z innego kontroler do tego modelu i slugia nima .... w widoku bym tego nie robil .. tam z php powinny byc jedynie instrukcje sterujace, w kazdym badz razie jak najmniej kodu php

Ostatnio edytowany przez robal77 (2009-08-04 11:28:35)

7

Odp: Dostęp do funkcji w kontrolerze głównym

w widoku teraz to jedynie sprawdzam jakby to wygladalo.

robal77 - jakbys to rozwiazal.
czytam sobie dane przez find nastepnie petla przez ta tablice dodaje dynamicznie pole url w ktorym jest zamieniona wartosc z name przez inflector::slug?

pozdr.

8

Odp: Dostęp do funkcji w kontrolerze głównym

gaw napisał/a:

witam,

mam pewien banalny problem.
nie wiem w jaki sposób dostać się w widoku lub kontrolerze do funkcji znajdującej się w app_controller.php

Próbowałem metodą prób i błędów

$this->nazwa_funkcji();

Controller->nazwa_funkcji();

parent::nazwa_funkcji();

Controller::nazwa_funkcji();

zadne nie dziala. jak wywołać tą funkcję?

pozdr.

$this->nazwa_metody(); musi działać. Co konkretnie się dzieje, że twierdzisz, iż nie działa?

9

Odp: Dostęp do funkcji w kontrolerze głównym

$this->international_paranoid($gallery['name']);

Fatal error: Call to undefined method View::international_paranoid() in C:\xampp\htdocs\cake\app\views\shows\clip_detail.ctp on line 21

Ostatnio edytowany przez gaw (2009-08-05 08:46:27)

10

Odp: Dostęp do funkcji w kontrolerze głównym

tja, ale tylko w kontrolerze, który dziedziczy po AppController tak możesz zrobić. Przepływ danych w MVC jest od Model przez Kontroler do Widoku. Raczej nie należy używać kontrolerów w widokach (w 1.1 była możliwość w widoku $this->controller, ale w 1.2 ta referencja do kontrolera została usunięta), ktoś już wyżej o tym napisał.
Masz dwa wyjścia - przygotować Helper, albo użyć requestAction. Sposobu z globalną funkcją nie polecam - to też łamie MVC (OOD też).

11

Odp: Dostęp do funkcji w kontrolerze głównym

gaw napisał/a:

robal77 - jakbys to rozwiazal.
czytam sobie dane przez find nastepnie petla przez ta tablice dodaje dynamicznie pole url w ktorym jest zamieniona wartosc z name przez inflector::slug?
pozdr.

Dokladnie tak.


czyli

<?php
class XyzModel extends AppModel
{
.....
 public function getRecords()
{
        $records = $this->find("all");

         foreach($records as &$record)
        {
              $record['Xyz']['slug'] = Inflector::slug($record['Xyz']['marchewkowe_pole']);
         }
}

.....
}

Ostatnio edytowany przez robal77 (2009-08-05 10:13:58)

12

Odp: Dostęp do funkcji w kontrolerze głównym

robal77 napisał/a:
gaw napisał/a:

robal77 - jakbys to rozwiazal.
czytam sobie dane przez find nastepnie petla przez ta tablice dodaje dynamicznie pole url w ktorym jest zamieniona wartosc z name przez inflector::slug?
pozdr.

Dokladnie tak.

A jeszcze lepiej byłoby tą logikę przenieść do modelu (fat model, thin controller)

13

Odp: Dostęp do funkcji w kontrolerze głównym

No o tym pisalem od samego poczatku ;-)

14

Odp: Dostęp do funkcji w kontrolerze głównym

faktycznie robal77, nie doczytałem Twojego postu. Sorki nie chciałem Ci "podkradać" zasług wink

15

Odp: Dostęp do funkcji w kontrolerze głównym

jakich zaslug ? smile

Id... szukam kogos chetnego do pomocy w ukonczeniu  implementacji tego : http://news.kg/wp-content/uploads/tree/d&d/  jako helpera/plugina do kłejka... i pulikacji tego na forum .... nie chcialo by Ci sie troche czasu spedzic  ( z tymze mam na mysli w pelni edytowlana wersje drzewa)?

Ostatnio edytowany przez robal77 (2009-08-05 10:53:35)