Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Symfony własne funkcje, kontroler, widok
Malinaa
post 5.02.2021, 18:15:53
Post #1





Grupa: Zarejestrowani
Postów: 518
Pomógł: 6
Dołączył: 21.07.2008

Ostrzeżenie: (0%)
-----


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.


--------------------
I welcome you on the Internet >>> Design by Malina
Go to the top of the page
+Quote Post
rad11
post 5.02.2021, 18:23:07
Post #2





Grupa: Zarejestrowani
Postów: 1 270
Pomógł: 184
Dołączył: 7.10.2012
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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ś?

Ten post edytował rad11 5.02.2021, 18:23:33
Go to the top of the page
+Quote Post
Malinaa
post 5.02.2021, 18:51:10
Post #3





Grupa: Zarejestrowani
Postów: 518
Pomógł: 6
Dołączył: 21.07.2008

Ostrzeżenie: (0%)
-----


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).

Ten post edytował Malinaa 5.02.2021, 19:09:56


--------------------
I welcome you on the Internet >>> Design by Malina
Go to the top of the page
+Quote Post
viking
post 5.02.2021, 20:13:29
Post #4





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


A pamiętasz o https://www.php.net/manual/en/language.oop5...p#object.invoke ?


--------------------
Go to the top of the page
+Quote Post
Malinaa
post 5.02.2021, 21:11:01
Post #5





Grupa: Zarejestrowani
Postów: 518
Pomógł: 6
Dołączył: 21.07.2008

Ostrzeżenie: (0%)
-----


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

Ten post edytował Malinaa 5.02.2021, 21:52:11


--------------------
I welcome you on the Internet >>> Design by Malina
Go to the top of the page
+Quote Post
nospor
post 6.02.2021, 10:25:51
Post #6





Grupa: Moderatorzy
Postów: 36 446
Pomógł: 6292
Dołączył: 27.12.2004




Dawno nie pisalem w symfony tego typu rzeczy, ale czy to nie jest to czego szukasz?
https://symfony.com/doc/current/templating/..._extension.html


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Malinaa
post 6.02.2021, 17:33:41
Post #7





Grupa: Zarejestrowani
Postów: 518
Pomógł: 6
Dołączył: 21.07.2008

Ostrzeżenie: (0%)
-----


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.

Ten post edytował Malinaa 6.02.2021, 17:35:03


--------------------
I welcome you on the Internet >>> Design by Malina
Go to the top of the page
+Quote Post
LowiczakPL
post 7.02.2021, 18:23:05
Post #8





Grupa: Zarejestrowani
Postów: 531
Pomógł: 55
Dołączył: 3.01.2016
Skąd: Łowicz

Ostrzeżenie: (0%)
-----


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([...



--------------------
Szukam zleceń Symfony, Laravel, Back-End, Front-End, PHP, MySQL ...
Go to the top of the page
+Quote Post
Malinaa
post 9.02.2021, 17:23:21
Post #9





Grupa: Zarejestrowani
Postów: 518
Pomógł: 6
Dołączył: 21.07.2008

Ostrzeżenie: (0%)
-----


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)?

Ten post edytował Malinaa 9.02.2021, 17:25:21


--------------------
I welcome you on the Internet >>> Design by Malina
Go to the top of the page
+Quote Post
nospor
post 9.02.2021, 17:37:40
Post #10





Grupa: Moderatorzy
Postów: 36 446
Pomógł: 6292
Dołączył: 27.12.2004




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.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
LowiczakPL
post 11.02.2021, 17:59:55
Post #11





Grupa: Zarejestrowani
Postów: 531
Pomógł: 55
Dołączył: 3.01.2016
Skąd: Łowicz

Ostrzeżenie: (0%)
-----


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.

Ten post edytował LowiczakPL 11.02.2021, 18:09:39


--------------------
Szukam zleceń Symfony, Laravel, Back-End, Front-End, PHP, MySQL ...
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 18.04.2024 - 16:17