strony www, sklepy internetowe, oprogramowanie

Archiwum z 2011/06

Symfony2 style i javascript z bundle

Wtorek, czerwiec 28th, 2011

Jeżeli chcemy w naszej aplikacji korzystać z plików css bądź js znajdujących się w bundle tworzymy w bundle ścieżki katalogów:


App\NameBundle\Resources\public\js
App\NameBundle\Resources\public\css

A następnie dodajemy w nich nasze pliki np plik test.css

Po wprowadzeniu pierwszych definicji w naszych stylach instalujemy style poprzez:

app/console assets:install --symlink web/
Należy zwrócić uwagę na wygenerowane ścieżki, ponieważ będzie to potrzebne przy linkowaniu styli.
Po tych operacjach możemy już w naszych szablonach twig korzystać z kodu:

<link rel=”stylesheet” type=”text/css”  href=”{{ asset(’bundles/appname/css/test.css’) }}” />

Od tego momentu możemy już zaobserwować zmiany wyglądu.

Symfony2 services i event listener

Poniedziałek, czerwiec 27th, 2011

Jeżeli jesteś osobą programującą wcześniej w Symfony w wersji 1.* na pewno miałeś okazję korzystać z filtrów które są niesamowicie przydatnym mechanizmem. Szukając tego mechanizmu w Symfony2 niestety w pierwszej chwili możemy się rozczarować – ponieważ nie istnieje w nim rozwiązanie 1:1 takie samo.

Ale jak to zwykle bywa, nie ma tego złego co by na dobre nie wyszło. Zamiast filtrów możemy skorzystać z Event Listenerów i Serwisów.
Postawmy sobie założenie: “chcemy przed wyświetleniem treści w każdym kontrolerze/akcji wyświetlić dodatkowy tekst”

Rozpoczynamy od stworzenia klasy Listener’a .

W naszym przypadku będzie to plik w lokalizacji App\NameBundle\Listener\ o nazwie CheckListener.php

namespace App\NameBundle\Listener;

use Symfony\Component\EventDispatcher\EventDispatcher;
use Symfony\Component\EventDispatcher\Event;

class CheckListener
{
public function onCoreController() {
echo 'added in App\NameBundle\Listener\CheckListener\Controller'.'
';
}
public function onCoreRequest() {
echo 'added in App\NameBundle\Listener\CheckListener\Request'.'
';
}
}

W klasie mamy zdefiniowane dwie metody które wykorzystamy przy zgłaszaniu eventu przez controller oraz request.

Przyszedł czas na podłączenie naszego Listenera do Symfony2. Do tego wykorzystujemy kod w pliku config.yml :

services:
kernel.listener.check_controller:
class: App\NameBundle\Listener\CheckListener
tags:
- { name: kernel.event_listener, event: kernel.controller , method: onCoreController }
kernel.listener.check_request:
class: App\NameBundle\Listener\CheckListener
tags:
- { name: kernel.event_listener, event: kernel.request , method: onCoreRequest }

Dzięki tej konfiguracji wszystko powinno już działać. Kolejny plusem jest iż po wywołaniu strony przekonamy się który z mechanizmów zostanie wykonany jako pierwszy.
Możemy uchylić rąbka tajemnicy i jednoznacznie stwierdzamy iż jako pierwszy zostanie uruchomiony kernel.request a dopiero kolejno kernel.controller.

Symfony2 i Doctrine2 relacja OneToOne

Niedziela, czerwiec 26th, 2011

Jak zrobić relację jeden do jednego w Symfony2 i Doctrine2 – sprawa wydaje się banalnie prosta i w rzeczy samej taka jest, ale niestety pominięto to w dokumentacji Symfony2. Przy okazji tego problemu weźmiemy też pod uwagę wykorzystanie Entity z innego Bundle.

Załóżmy więc, że mamy Entity Foo\NaszeBundle\Entity\Tabela1 oraz Foo\IchBundle\Entity\Tabela2

W tabeli Tabela2 chcemy umieścić klucz obcy do tabeli Tabela1. Zatem w definicji Entity Tabela2 umieszczamy następujący kod:

/**
* @ORM\OneToOne(targetEntity=”Foo\NaszeBundle\Entity\Tabela1″)
* @ORM\JoinColumn(name=”idTabela1″, referencedColumnName=”id”)
*/
protected $idTabela1;

Dzięki tak prostej regule w definicji Entity Tabela2 zmienna $idTabela1 stanie się kluczem obcym do Tabela1.

mssql i freetds w ubuntu lub debian

Środa, czerwiec 22nd, 2011

Jeżeli w swojej pracy bądź pasji tworząc nową aplikację trafiliście na konieczność współdziałania php z bazą mssql i do tego na serwerze opartym o debian/ubuntu na pewno trafiliście na problem braku sterownika do połączenia.

Aby móc połączyć naszą aplikację php z serwerem mssql konieczne będzie zainstalowanie i skonfigurowanie freetds.
Można zrobić to w kilku szybkich krokach – oto one:

  1. Instalujemy freetds z pakietów deb
    sudo apt-get install freetds-dev
  2. Instalujemy bibliotekę mssql w php (o ile nie została zainstalowana wcześniej)
    sudo apt-get install php5-mssql
  3. Znajdujemy plik konfiguracyjny freetds i edytujemy go
    sudo find / -name freetds

    Z listy wyszukanych plików wybieramy odpowiedni, w naszym przypadku jest to plik:
    sudo mcedit /etc/freetds/freetds.conf

    na końcu pliku dodajemy sekcję:
    [nasz_host]
    host=nasz_host
    port=1433
    tds version=8.0

  4. Edytujemy plik hosts
    sudo mcedit /etc/hosts

    i dodajemy w nim nasz host np.
    127.0.0.1 nasz_host

  5. Restartujemy apache
    sudo etc/init.d/apache2 restart

Od teraz możemy korzystać już z naszego host’a do połączeń z serwerem mssql .