Wywołanie funkcji z controllera A w controllerze B [Laravel]

Odpowiedz Nowy wątek
2019-03-29 23:35
0

Cześć,
próbuję napisać pierwszą aplikację wykorzystując Laravela i pojawił się problem, na rozwiązanie którego nie mam pomysłu. Mianowicie mam zrobionego klasycznego CRUDa i działa on na dajmy na to modelu A. Do tego mam model B z innymi polami, w którym występuje jedynie id modelu A i chciałbym, żeby te dwie tabele były tym polem ze sobą powiązane. Dodatkowo w modelu A występuje parametr liczbowy określający ile nowych elementów powinno zostać utworzonych w tabeli modelu B. Czyli jeśli parametr będzie dajmy na to równy 3, to chciałbym, żeby w tabeli B utworzone zostały 3 nowe elementy. W jaki sposób taki efekt najłatwiej uzyskać? Myślałem, żeby ten parametr liczbowy przekazać do funkcji w controllerze modelu B.

Pozostało 580 znaków

2019-05-12 18:25
0

Gdyby ktoś zapytał jak najlepiej wywołać metode z innego kontrolera w drugim to bym powiedział że napisać klase, użyć helpera albo zrobić Trait.
Opcja

app('App\Http\Controllers\InnyController')->metoda();

jest zła bo burzy organizację kodu i przestrzeni nazw ale nie jest zła pod względem wydajności. Nie martw się sam stosowałem tę metodę na chwile by coś tylko sprawdzić a potem przenosiłem kod gdy musiałem poprawiać kwiatki po kimś tam kto odszedł z firmy. Wasz problem jest taki ,że uważacie się za lepszych i zamiast pomóc to krytykujecie nie podając powodu. Takie zwykłe Skrypt Kiddi :)

edytowany 2x, ostatnio: fporzo, 2019-05-12 18:26
Ja pomogłem, podałem właściwe rozwiązanie problemu i chyba twórca wątku zrozumiał, bo się już potem nie dopytywał o nic. - mr_jaro 2019-05-12 18:29
Myślę, że tak. - fporzo 2019-05-12 22:04

Pozostało 580 znaków

2019-05-12 18:34
0

a co to jest CRka ?

Ty tak na serio?

Pokaż pozostałe 2 komentarze
@fporzo: code review robiony przed mergem przez osoby odpowiedzialne za utrzymanie porządku w projekcie. - mr_jaro 2019-05-12 22:05
Aaaa no fakt. Ja nie robie CR moj kod jest zoptymalizowany z miejsca ale ja mam ponad 20 lat doswiadczenia - fporzo 2019-05-12 22:06
@fporzo: to się wyklucza :) Jeśli nie robisz code review tzn że inni ci robią a wtedy jesteś juniorem, czyli nie masz 20 lat doświadczenia, jednak jeśli masz 20 lat doświadczenia to powinieneś być robiącym code review, tego co zrobili np juniorzy. - mr_jaro 2019-05-12 22:10
Pracowałem sam wiele lat Zend, teraz Laravel w zasadzie wszystko to jedno i to samo. Nie robie CR bo nie pracuje dla nikogo tylko dla siebie. Po tylu latach trudno zebym pisał dla kogos kod. To tak jak aktor ktory staje sie rezyserem az zaklada wlasna wytwornie filmowa :) - fporzo 2019-05-12 22:14
@fporzo: no i to był wielki błąd, praca w zespole nawet jako podwykonawca daje dużo, teraz pewnie ciężko by było, żeby ktokolwiek mógł wejść w twój kod. - mr_jaro 2019-05-12 22:21

Pozostało 580 znaków

2019-05-12 22:26
0

To klasa obsługująca wiadomości z najnowszego projektu

<?php

namespace App\Http\Controllers;

use App\Message;
use Illuminate\Http\Request;

class MessageController extends Controller
{
    public function index()
    {
        return view('message.index')
            ->with('messages', Message::where('user_id', Auth()->user()->id)
            ->orderBy('id', 'desc')
            ->paginate(env('MESSAGE_PAGINATE')));
    }

    public function view($id = 0)
    {
        $message = Message::find($id);
        if (!empty($message)) {
            if ($message->status_id == 65)
                $message->markAsOpened();
            return view('message.view')->with('message', $message);
        }

        return redirect()->back();
    }

    public function delete($id = 0)
    {
        Message::where('id', $id)->where('user_id', Auth()->user()->id)->delete();
        return redirect()->route('message.index');
    }
}

A to pivot z kategoriami w eloquent oczywiście

<?php
namespace App\Pivots;

use Illuminate\Database\Eloquent\Relations\Pivot;

class CategoryDictGroup extends Pivot {

    public function category()
    {
        return $this->belongsTo('App\Category');
    }

    public function dictGroup()
    {
        return $this->belongsTo('App\DictGroup');
    }

    public function dict()
    {
        return $this->hasManyThrough('App\Dict', 'App\DictGroup');
    }

}

@mr_jaro Wątpie by ktoś tak doświadczony jak ty miał kłopot z moim kodem.

edytowany 1x, ostatnio: fporzo, 2019-05-12 22:27
Pokaż pozostałe 51 komentarzy
Tak się zastanawiałem, kiedy wytoczysz argumentum ad personam. Myślę, że możemy się rozjeść, bo oboje mamy odmienne zdanie ;) - Desu 2019-05-12 23:54
to pytanie o ASM jest od kolesia co niewiele umie i udaje ze wie o co chodzi. Po latach dosiwadczen wyczuwa sie takie pytania. Uzywam luznych porownan bo sa szybsze - fporzo 2019-05-12 23:55
@fporzo Dziękuję za odpowiedź, to załatwia sprawę :) - ccwrc 2019-05-12 23:57
Mam nadzieję, że @fporzo trolujesz - lgtk 2019-05-13 00:31
Nie uzywam takiego slownictwa bo nie wiem co to znaczy. Tego nawet nie bylo za czasow Dzieci Neo. DLa was jak tylko ktos ma argumenty ale nie mozecie ich odeprzec to wlasnei uzywa sie tego slowa Trol czy cos - fporzo 2019-05-13 00:33

Pozostało 580 znaków

2019-05-12 22:49
1

Kłopot może nie, ale spokojnie każdy robiący Ci CR wyłapałby takie coś jak np.:

if ($message->status_id == 65)
     $message->markAsOpened();
return view('message.view')->with('message', $message);

1) Zawsze powinieneś używać klamer, nawet jeśli to 1 linijka w ifie.
2) Przed return powinien być enter.

3)

return $this->belongsTo('App\Category');

To pewnie spokojnie można zamienić na:

return $this->belongsTo(Category::class);

4) W jednej klasie masz klamrę otwierającą klasę na końcu linijki, a w innej masz w nowej linijce
5) Niepotrzebne puste linijki po klamrze otwierającej i przed zamykającą.
6) Raz masz enter przed namespace, a raz nie masz.
7) Jeśli używasz PHP 7, to warto dodawać typowanie.
8) ID statusu powinno być w const.

Nie są to błędy jako tako, ale dobrze się jest jednak trzymać jakichś reguł.

edytowany 5x, ostatnio: serek, 2019-05-12 22:55
Pokaż pozostałe 3 komentarze
Wydaje Ci się, że są to pierdoły. W kontekście jednej CR, to może są pierdoły, ale grosz do grosza i wielka kupa błota zaczyna rosnąć. Jeżeli kod jest jednolity, to łatwiej się go czyta. - Desu 2019-05-12 23:24
Moj kod czyta sie bardzo latwo co udowdnilem - fporzo 2019-05-12 23:25
Tobie tak, ale innym nie. - Desu 2019-05-12 23:26
Jeżeli moj kod nie czyta sie latwo to pomysl moze o zmianie branzy :) bo chyba do Juniora sie nie zaliczasz nawet :P - fporzo 2019-05-12 23:27
Miło się rozmawiało ;) - Desu 2019-05-12 23:28

Pozostało 580 znaków

2019-05-12 23:00
0

Skoro w laraverze mozesz tak zrobic jak napsialem to znaczy ze nie jest to zla praktyka. Moze to wlasnie jest dobre rozwiazanie. Kto ci wmowil ze tak jest zle ? bo kto tak powiedzial ? Nazwisko. Powielasz tylko to co mowili inni i myslisz ze masz racje.

To, że coś możesz zrobić, nie oznacza, że jest to dobre. Problem nie jest w tym, że chcesz wywołać jakąś metodę controllera z innego miejsca. Problem jest dużo, dużo wcześniej, a to, co chcesz zrobić, to jego skutek.

Problem pojawia się, w momencie, w którym zapakowałeś do controllera logikę, którą chcesz ponownie użyć. Pogwałciłeś SRP i masz za swoje. Controller powinien być tylko odpowiedzialny za przyjęcie żądania i wygenerowanie stosownej do danego przypadku użycia odpowiedzi. A powinno tak być nie dlatego, że ktoś tak sobie wymyślił, tylko jest to praktyczne. Gdybyś miał ładnie podzielone odpowiedzialności, to byś się nie zastanawiał jak tu wywołać ręcznie controller, tylko użyłbyś jakiejś instancji klasy, która ma metodę robiącą to co potrzebujesz i która jest niezależna od kontekstu HTTP.

edytowany 2x, ostatnio: Desu, 2019-05-12 23:01
Zgadza się tę odpowiedź skieruj do autora tego wątku nie do mnie bo ja to wiem. - fporzo 2019-05-12 23:04
Z Twojej odpowiedzi wynika coś zupełnie odwrotnego. - Desu 2019-05-12 23:04
"Moze to wlasnie jest dobre rozwiazanie" - czytaj dokładniej. napisałem: może - fporzo 2019-05-12 23:07

Pozostało 580 znaków

2019-05-12 23:14
0

Ale to ja ustalam standadry i te są jak najbradziej poprawne. Twój CR musi udawac ze cos robi wiec czepialby sie o wszystko. Kod jest wysmienity wiec musiales sie czepnac o pierdoły nic nieznaczace

Dobrze, że pracujesz sam. Inaczej by Twoich kolegów z pracy szlag trafił z takim podejściem. No i powodzenia, jeśli ktoś inny niż Ty taki kod musiałby przejąć.

edytowany 2x, ostatnio: serek, 2019-05-12 23:15
Pokaż pozostałe 12 komentarzy
Dobra to chce dodac te stale to jak to zrobic ? - fporzo 2019-05-13 00:02
Pod pojęciem standard rozumiem wspólnie ustalone kryterium, które określa powszechne, zwykle najbardziej pożądane cechy czegoś, np. wytwarzanego przedmiotu (np. standardem jest, że każdy współcześnie wytwarzany telewizor wyświetla kolory, ale NIE JEST NIEDOZWOLONE stworzenie telewizora czarno białego). - Desu 2019-05-13 00:03
Dokladnie tak. I tego sie 3majmy - fporzo 2019-05-13 00:03
xD fajne fajne dzieki chociaz preferuje swoj sposob - fporzo 2019-05-13 00:11

Pozostało 580 znaków

2019-05-12 23:19
0

To są ogólnie przyjęte standardy w php, zwą się PSR i są to podstawy o które pytali mnie nawet przy rekrutacji na juniora 5 lat temu. Co więcej nie musisz tego robić sam, bo jest coś takiego jak csfixer i naprawia on wszystko sam. https://github.com/FriendsOfPHP/PHP-CS-Fixer

Pokaż pozostałe 14 komentarzy
Jest komus sie sprawdza to moze nie jest bldne? Bledem jest zakladac ze wiekszosc ma racje, gdyby tak bylo kopernik nie odkrylby obrotu ziemi bo wzorowalby sie na blednych wnioskach poprzednikow - fporzo 2019-05-12 23:56
błędne jest to, że łamiąc polowe standardów wypracowywanych latami przez setki programistów uważasz ich za jełopów. Cóż żyj sobie w swoim świecie ja ci nie bronie, w nim możesz się czuć zajebisty tak bardzo jak tylko możesz. - mr_jaro 2019-05-12 23:59
Jest ok ;) - fporzo 2019-05-13 00:03
@fporzo Generalnie pisz jak ty uważasz oni tez nie są expertami, Controllery tylko są do obsługi routingu i wywoływania widoków algorytmy już większe umieszczas w katalogu services. - pol90 2019-05-15 13:52
@pol90 pewnie masz racje podejrzewam, struktura katalogow to juz jest dowolna sprawa. Widzialem kwiatki gdzie w konrolerze byly funkcje, albo skomplikowane katalogi itd. Zalezy tez czy masz modulowy projekt czy robisz api pod apke itd . Takze tu bym sie nie skupial na jakims jednym prawidlowym rozwiazaniu - fporzo 2019-05-15 14:21

Pozostało 580 znaków

2019-05-12 23:50
1

No dobra, jeden wniosek:

title

a co zatkalo kakao z zazdrosci :) - fporzo 2019-05-12 23:52

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0