మీ కంట్రోలర్ తప్పు పని చేస్తోంది

మీ కంట్రోలర్‌ను తెరవండి. అందులో store మెథడ్ కోసం వెతకండి.

అందులో 40 లైన్ల కోడ్ ఉందా? ఒక పెద్ద validation బ్లాక్, అనేక if స్టేట్‌మెంట్‌లు, business logic మరియు చివరగా ఒక return స్టేట్‌మెంట్ కనిపిస్తున్నాయా?

మీ కంట్రోలర్ చేయకూడని పనిని చేస్తోంది.

కంట్రోలర్‌కు ఒకే ఒక పని ఉంటుంది. అది ఒక రిక్వెస్ట్‌ను స్వీకరిస్తుంది, సమస్యను పరిష్కరించడానికి ఒక సర్వీస్‌ను పిలుస్తుంది మరియు ఒక రెస్పాన్స్‌ను తిరిగి పంపుతుంది. అది వెయిటర్ లాంటిది, చెఫ్ కాదు.

మీరు కంట్రోలర్ లోపల validation మరియు authorizationలను ఉంచినప్పుడు, అది గందరగోళంగా మారుతుంది. చివరికి ఎవరూ తాకడానికి ఇష్టపడని 80 లైన్ల కోడ్‌తో మీరు ఇబ్బంది పడతారు.

Laravel లో దీనికి ఒక ఇన్-బిల్ట్ పరిష్కారం ఉంది: Form Requests.

సాధారణంగా తప్పుగా చేసే పద్ధతి ఇలా ఉంటుంది:

  • ఇన్‌పుట్ డేటాను వాలిడేట్ చేయడం (Validating input data)
  • యూజర్ పర్మిషన్లను తనిఖీ చేయడం (Checking user permissions)
  • డేటాను ట్రాన్స్‌ఫార్మ్ చేయడం (Transforming data)
  • Business logic ను రన్ చేయడం (Running business logic)

ఇది Single Responsibility Principle ను ఉల్లంఘిస్తుంది. ఒక క్లాస్‌కు మారడానికి కేవలం ఒకే ఒక కారణం ఉండాలి. రిక్వెస్ట్ ఫ్లో మారినప్పుడు కంట్రోలర్ మారుతుంది. కేవలం ఒక validation రూల్ మారినంత మాత్రాన అది మారకూడదు.

దీనిని సరిచేయడానికి ఈ కమాండ్‌ను ఉపయోగించండి: php artisan make:request StorePostRequest

ఇది మీ రిక్వెస్ట్ లాజిక్ కోసం ఒక ప్రత్యేక ఫైల్‌ను సృష్టిస్తుంది. ఈ మూడు అంశాలను Form Request లోకి మార్చండి:

  • Authorization: పర్మిషన్లను తనిఖీ చేయడానికి authorize() మెథడ్‌ను ఉపయోగించండి.
  • Validation: మీ డేటా అవసరాలను నిర్వచించడానికి rules() మెథడ్‌ను ఉపయోగించండి.
  • Data Preparation: వాలిడేషన్‌కు ముందు డేటాను క్లీన్ చేయడానికి లేదా ఫార్మాట్ చేయడానికి prepareForValidation() ఉపయోగించండి.

ఇప్పుడు మీ కంట్రోలర్‌ను మళ్ళీ చూడండి:

public function store(StorePostRequest $request)
{
    $post = Post::create($request->validated());
    return redirect()->route('posts.show', $post);
}

ఇప్పుడు కంట్రోలర్ కేవలం రెండు లైన్ల పొడవు మాత్రమే ఉంది. అది మళ్ళీ వెయిటర్ లాగా పనిచేస్తోంది.

కంట్రోలర్ మెథడ్ ప్రారంభం కావడమే ఆలస్యం, Laravel ఆటోమేటిక్‌గా authorization మరియు validationలను రన్ చేస్తుంది. ఒకవేళ వాలిడేషన్ విఫలమైతే, యూజర్‌కు వెంటనే ఎర్రర్ వస్తుంది.

ఈ మార్గదర్శకాలను పాటించండి:

  • వాలిడేషన్ చిన్నదిగా ఉండి, కేవలం ఒకే చోట ఉపయోగిస్తుంటే, దానిని inline గానే ఉంచండి.
  • వాలిడేషన్ పెరిగినా, మళ్ళీ మళ్ళీ ఉపయోగిస్తున్నా లేదా అందులో authorization ఉన్నా, Form Request ఉపయోగించండి.
  • Form Request లో business logic ను ఉంచకండి. దాని కోసం Service layer ను ఉపయోగించండి.

ఈరోజే మీ అత్యంత గందరగోళంగా ఉన్న కంట్రోలర్‌ను వెతకండి. వాలిడేషన్‌ను Form Request లోకి మార్చండి. అది ఎంత చిన్నదవుతుందో చూడండి.

మీరు ఇప్పటివరకు చూసిన అతిపెద్ద store మెథడ్ ఏది? కామెంట్లలో నాకు చెప్పండి.

Source: https://dev.to/denisgusto1/seu-controller-ta-fazendo-o-trabalho-do-form-request-e-ele-nao-devia-512o