Paweł Koralewski

Paweł Koralewski architekt aplikacji,
team leader

Temat: [Sf2] odpowiednik sfConfig

W sf1 była globalna klasa, która dawała dostęp do dowolnej opcji konfiguracyjnej:
sfConfig::get('optionname', 512);
z każdego miejsca aplikacji. Jaki jest jej odpowiednik w Sf2?

konto usunięte

Temat: [Sf2] odpowiednik sfConfig

Przykład odwołania w kontrolerze:

$this->container->getParameter('param_name');

Oczywiście parametr zdefiniowany w config.yml tak:

parameters:
param_name: 'ala ma kota'
Paweł Koralewski

Paweł Koralewski architekt aplikacji,
team leader

Temat: [Sf2] odpowiednik sfConfig

W kontrolerze to wiem, już znalazłem. A w modelu (mapperze)? Gdzie mam coś takiego:
<?php

namespace Alden\xxx\Model;

use Alden\xxx\Entity\Product;

class ProductManager {

function ax() {
$param = ???
return array(
new Product('p3')
);
}
}?>

konto usunięte

Temat: [Sf2] odpowiednik sfConfig

http://stackoverflow.com/questions/5295588/doctrine-2-...

W kontruktorze się nie da, ale można pokombinować z setterem. Pytanie czy na pewno jest Ci to potrzebne. Czy może wystarczy ten parametr przekazać do funkcji jako argument?
Piotr W.

Piotr W. Symfony2 / MongoDB

Temat: [Sf2] odpowiednik sfConfig

Aleksander Wons:
http://stackoverflow.com/questions/5295588/doctrine-2-...

W kontruktorze się nie da, ale można pokombinować z setterem. Pytanie czy na pewno jest Ci to potrzebne. Czy może wystarczy ten parametr przekazać do funkcji jako argument?

Co co znaczy ze sie nie da???

services.[yml]

parameters:
whatever_manager.class: Acme\SomeBundle\Entity\WhateverManager
whatever_manager_param: siedemnascie
services:
acme.whatever_manager:
id: whatever_manager
class: %whatever_manager.class%
arguments: [%whatever_manager_param:%]

whateverManager:

class WhateverManager
{
private $paramFromTheSky;

public function __construct($paramFromTheSky)
{
$this->paramFromTheSky = $paramFromTheSky;
}
}

Ps Lepiej nic nie pisac jak sie nie wie niz pisac, ze sie nie da.
Paweł Koralewski

Paweł Koralewski architekt aplikacji,
team leader

Temat: [Sf2] odpowiednik sfConfig

OK, ale to rozumiem, że w Twoim WhateverManager jest usługą. A jeśli nie jest, w kodzie akcji wywołuję go:
use Alden\xxx\Model\ProductManager;
...
$m = new ProductManager();

I tak w kilkunastu miejscach i nie chcę za każdym razem podawać tych samych parametrów, tym bardziej że nie będą się one zmieniać wraz z życiem aplikacji.Paweł Koralewski edytował(a) ten post dnia 03.11.11 o godzinie 22:55

konto usunięte

Temat: [Sf2] odpowiednik sfConfig

Piotr Walków:

Ps Lepiej nic nie pisac jak sie nie wie niz pisac, ze sie nie da.

A to przepraszam. Nie wiedziałem, że Entity w Doctrine to service... Rozłożyłeś mnie na łopatki swoją wiedzą.
Czyli jak robie

new Entity();

to injectuje mi w jakiś cudowny sposób containter do tego entity? Skoro tak to gratuluje pomysłowości.

Więc najlogiczniej zrobić tak jak w opisanym poście. Podłączyć się pod stosowny event podczas tworzenia entity i setterem ustawić containter.
Piotr W.

Piotr W. Symfony2 / MongoDB

Temat: [Sf2] odpowiednik sfConfig

Równie dobrze mozesz uzyc jednego pliku z wlasna konfiguracja i wyciagac go za pomoca:

use Acme\SomeBundle\Utits\SomeParameters;
...
{
$param = SomeParameters::$parameterFromTheSky;
}
Paweł Koralewski

Paweł Koralewski architekt aplikacji,
team leader

Temat: [Sf2] odpowiednik sfConfig

Piotr Walków:
Równie dobrze mozesz uzyc jednego pliku z wlasna konfiguracja ...

Owszem, ale to jest niespójne z całą koncepcją Sf2. Oczywiście nie upieram się, że rozwiązanie, które ja chcę zastosować, jest zgodne :) W ogóle nie wiem, czy ono jest poprawne, tzn. czy tworzyć managery jako osobne klasy. Tak robiłem w sf1 i wewnątrz miałem potrzebne metody zadeklarowane statycznie.

konto usunięte

Temat: [Sf2] odpowiednik sfConfig

Może po prostu dla spokoju przekazuj te parametry jako argumenty wywołania i problemu nie będzie.

EDIT.
Zresztą po co Ci oddzielny manager skoro jest repository? Możesz tam spokojnie dodać potrzebne metody i im przekazywać potrzebne parametry w arumentach wywołania.Aleksander Wons edytował(a) ten post dnia 04.11.11 o godzinie 08:50
Paweł Koralewski

Paweł Koralewski architekt aplikacji,
team leader

Temat: [Sf2] odpowiednik sfConfig

A jeśli nie chcę (celowo) używać Doctrine?

konto usunięte

Temat: [Sf2] odpowiednik sfConfig

No to odpowiedź już dał Piotr.
Robisz service i jako parametr kontruktora dodajesz container. I wtedy masz zasze dostęp do kontenera i dzięki temu do parametrów.
Alan Gabriel B.

Alan Gabriel B. Software Engineer,
IFX

Temat: [Sf2] odpowiednik sfConfig

Paweł, szukasz dziury w całym. Przyjmij po prostu jako rule of thumb, że przekazywanie kontenera do modelu jest zwyczajnie złym pomysłem.

Projektując dziedzinę (zbiór klas odpowiedzialnych za logikę biznesową w projekcie) należy pamiętać, żeby zachować jak najmniejszą liczbę zależności dla klasy A (Zakładając, że jeżeli klasa B jest zależnością A, a klasa C jest zależnością B to C jest również zależnością A). Taki graf klas jest łatwiejszy do ogarnięcia i instancjonowania.

Posłuchaj się Aleksandra i przekazuj zmienną jako parametr - to jest po prostu najelegantsze rozwiązanie i najmniej problematyczne.
Paweł Koralewski:
A jeśli nie chcę (celowo) używać Doctrine?

A co jeżeli nie będziesz chciał, albo nie będziesz mógł, używać Symfony??? Nadal uważasz, że przekazywanie kontenera to dobry pomysł.

Kontener powinien zarządzać twoimi obiektami, być ponad nimi w osobnej warstwie, nic więcej.

A jeśli nie jest, w kodzie akcji wywołuję go:
use Alden\xxx\Model\ProductManager;
$m = new ProductManager();

Od tego rodzaju przypadków masz fabryki lub buildery, które już możesz trzymać w kontenerze.
Paweł Koralewski

Paweł Koralewski architekt aplikacji,
team leader

Temat: [Sf2] odpowiednik sfConfig

Alan Gabriel B.:
Paweł, szukasz dziury w całym. Przyjmij po prostu jako rule of thumb, że przekazywanie kontenera do modelu jest zwyczajnie złym pomysłem.

Przekazywanie kontenera do modelu to nie ja wymyśliłem :) Ani nie sugerowałem. Natomiast posiłkując się radami zawartymi w tym wątku, zamierzam korzystać z dwóch rozwiązań, zależnie od potrzeb:
1. zebrać funkcjonalności i utworzyć usługę
2. do konstruktora modelu przekazać potrzebne parametryPaweł Koralewski edytował(a) ten post dnia 07.11.11 o godzinie 23:53

Następna dyskusja:

[sf2] odpowiednik sfPLValid...




Wyślij zaproszenie do