Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Symfony własne funkcje, kontroler, widok
Forum PHP.pl > Forum > PHP
Malinaa
Symfony. Jak załadować własne funkcje do kontrolera i/lub widoku?

Mam tak:

1. Dodałem plik w katalogi src/Bundle/Twig/AppFunctions.php (funkcja dla testu)

Kod
<?php
namespace Bundle\Twig;

class AppFunctions
{
    public function getTName()
    {
        return 'Test Name';
    }
}


W tym pliku chciałbym umieścić wszystkie dodatkowe funkcje jakie będą potrzebne na stronach projektu

2. W services.yaml dodałem kod

Kod
# My Functions
    app.twig_functions:
        class: Bundle\Twig\AppFunctions
        public: false
        tags: { name: twig.functions }


3. W pliku IndexController.php

Kod
<?php
namespace App\Controller;

use App\Entity\Users;
use App\Entity\Articles;
use App\Bundle\Twig\AppFunctions;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;

class IndexController extends AbstractController
{
    /**
     * @Route({"pl": "/", "en": "/"}, name="index")
     */
    public function index()
    {

     $em = $this->getDoctrine()->getManager();
     $indexArticles = $em->getRepository(Articles::class)->findBy(['index' => true], ['uploaded_at' => "DESC"], $max = 4, $first = null);
      
     return $this->render('index/index.html.twig', [
            'indexArticles' => $indexArticles
        ]);

   }
}


Pytanie jak dodać własne funkcje, które mają formatować dane widoku z tablicy $indexArticles
a ) formatowanie opisu
b ) funkcja generująca SEO link
i inne funkcje używane na podstronach projektu.
rad11
A nie możesz po prostu wstrzyknąć jako argument kontrolera lub jako argument metody ? A po zatym nie lepiej utworzyć po prostu service na takie coś?
Malinaa
Myślałem nad service, czy będzie tu najlepszym rozwiązaniem, kiedy dobrze byłoby dodać tekie rozszerzenia do Twiga?

Sprawdziłem {{ content|slice(0, 300) }} ale nie wyświetla oczekiwanego wyniku, więc chciałbym dodać własną funkcję.
Podobnie z SEO linkiem, wolałbym własny, bo mogę go utworzyć jak chcę dla starej strony i obecnych linków (nie trzeba będzie od nowa pozycjonwać podstron).
viking
A pamiętasz o https://www.php.net/manual/en/language.oop5...p#object.invoke ?
Malinaa
Z ciekawości. Skąd mam pamiętać? I do czego zmierzamy!

Jako pasjonat myślę, że zadałem proste pytanie (dla znawcy Symfony), a odnoszę wrażenie, że wywołujemy błędne koło.

Nie tyle znam, co próbuję Symfony, teraz pobłądziłem w ciemności. Nie rozwiązujemy problemu, a stwarzamy stare/nowe.

Nie wiem jak dodać własne funkcje w Symfony, które w widoku pokażą to chcę wywołać, sformatowany kod dobrze czytelny dla przeglądarek i użytkownika,
mając na uwadze, że przystosowuję projekt do istniejącej nie szablonowej strony smile.gif
nospor
Dawno nie pisalem w symfony tego typu rzeczy, ale czy to nie jest to czego szukasz?
https://symfony.com/doc/current/templating/..._extension.html
Malinaa
Byłem na podanej stronie i stąd zacząłem pisać rozszerzenie, ale coś nie szło.
Usiadłem dzisiaj i mnie olśniło. Dzięki nospor.

Dodany filtr śmiga.
LowiczakPL
podpowiem tylko tyle że nie używa się już takiego dostępu do repozytorium ...

  1. public function index()
  2. {
  3. $em = $this->getDoctrine()->getManager();
  4. $indexArticles = $em->getRepository(Articles::class)->findBy([...


teraz pisze się

  1. public function index(ArticleRepository $articleRepository)
  2. {
  3. $articles = $articleRepository->findBy([...

Malinaa
Nie używa się od której wersji Symfony? U mnie moja opcja 1 działa, a 2 nie chce działać.

Skąd "pobierasz" takie informacje (daj znać nie będę musiał tracić czasu na szukanie).
Irytuje mnie już to Symfony nie chodzi najlepiej, strona długo się otwiera...
ponadto w PHP miałbym projekt ukończony, a teraz muszę rzeźbić z encjami itd.,
cóż nikt nie mówił, że pierwszy projekt w tym frameworku będzie łatwy.

Zastanawiam się, czy to dobry pomysł z tym Symfony?
Ten projekt strony nie jest dla mnie priorytetowy, zacząłem go jakieś dwa lata temu,
była wówczas wersja Symfony 3, potem nie miałem czasu na te stronkę, wróciłem do
projekt na jesień zeszłego roku i musiałem poprzednią całość przepisać do Symfony 5,
teraz chciałem przy tym usiąść i zaś dobrze byłoby zaktualizować Symfony
i przepisać wszystko od nowa - trochę lipa z takim Symfony (za 5 lat może go nie być, wejdzie ciekawsze rozwiązanie).

Przepisanie strony z PHP 5.6 do >7 to bułka z masłem, ale przepisanie wszystkiego w Symfony
to kawał czasu, można się zmęczyć, a po co, i strona chodzi na tym frameworku ciężko.

Pytanie. Jeśli aktualizacje kodu tej stron planuje za 10 lat, czy nie lepiej stworzyć ten projekt w czystym PHP (co przemawia za Symfony, a co za czystym PHP)?
nospor
Jesli stronka chodzi ci wolno to nie wina Symfony tylko tego, ze cos zle napisales. Appki na symfony chodza calkiem szybko a samo Symfony jest optymalizowane by chodzic jak najszybciej.

Generalnie nie pisze sie juz sstronek w czystym php tylko uzywa sie Frameworkow, ktore odwalaja za ciebie kawal roboty oraz jest wiele dostepnych paczek, ktore jeszcze ci pomoga i przyspiesza.

Zgadzam sie jednak z toba, ze pierwszy projekt w danym FW moze byc meczacy. Ja tam tez szczegolnie za tym calym doctrine* nie przepadam i jak nie musze to omijam szerokim lukiem smile.gif


* jak juz ci wczesniej pisalem to nie symfony jako takie a doctrine. nie musisz tego uzywac.
LowiczakPL
Cytat(Malinaa @ 9.02.2021, 17:23:21 ) *
Nie używa się od której wersji Symfony? U mnie moja opcja 1 działa, a 2 nie chce działać.

Skąd "pobierasz" takie informacje


Od wersji 4.4 wstrzykuje się repo, w 3.4 jest Twój stary sposób.

Wszystko jest napisane w dokumentacji Symfony.

Aby ten właściwy sposób zadział musisz mieć oczywiście zrobione repozytorium danej Encji.

W repozytoriach tych trzyma się większe zapytania danej encji.

Używanie Doctrine w Symfony usprawnia i przyspiesza pisanie aplikacji.

Dzięki Doctrine przełączenie się na inną bazę danych MySql/Postgres/Mongo to tylko zmiana adresu serwera z bazą danych.

Oczywiście jeśli korzystasz poprawnie z DQLa a nie Query Stringa.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.