Jordan95 Δημοσ. 9 Μαΐου 2020 Δημοσ. 9 Μαΐου 2020 Γεια χαρα σε ολους! Εχω μια απορια σχετικα με τους Controllers στο Laravel. Εστω οτι θελω να φτιαξω μια εφαρμογη οπου ο χρηστης θα μπορει να βλεπει: - Ολα τα βιβλια των οποιων ο τιτλος ξεκιναει απο "Α" στο: /books/a, απο "Β" στο /books/b και ουτω καθεξης. - Ενα συγκεκριμενο βιβλιο στο: /book/book-title. Εχω φτιαξει 2 διαφορετικους Controllers (BooksController και BookController) αλλα 1 Model, αφου και στις δυο περιπτωσεις αντλω τα δεδομενα απο τον ιδιο πινακα στη βαση (books). Για καποιο λογο, το οτι εφτιαξα 2 Controllers μου φανηκε πλεονασμος, παρα το οτι δουλευει μια χαρα. Ειναι καλη πρακτικη ή υπαρχει καποιο λαθος στον παραπανω τροπο; Περισσοτερο ρωταω απο την αποψη, μηπως θα επρεπε/μπορουσα να κανω την ιδια δουλεια με 1 Controller αντι για 2. Ευχαριστω πολυ εκ των προτερων!
MitsarasAth Δημοσ. 9 Μαΐου 2020 Δημοσ. 9 Μαΐου 2020 γενικα αυτο δεν ειναι μονο του laravel αλλα γενικο concept του rest. εφοσον εχεις το books σαν domain εκει αφορα ολες τις λειτουργιες που μπορει να γινουν στο Books, πχ delete ,add κτλ.. Το καλυτερο θα ηταν ενας controller bookscontroller, κατα δευτερον οταν εχουμε καποιου ειδους search πχ τα βιβλια που αρχιοζυν απο αλφα τοτε πρεπει να τα περνας σαν query parameters api/books?firstletter =a και οχι σαν api/books/α. 1
jordansgr Δημοσ. 9 Μαΐου 2020 Δημοσ. 9 Μαΐου 2020 Κατά την γνώμη μου δεν είναι πλεονασμός. Πλέον δεν κοιτάμε την ποσότητα των κλάσεων. Αλλά τον κώδικα μέσα σ αυτές. Το να κάνει διαφορετικές κλάσεις στην πορεία θα σου λύσουν τα χέρια σε εργασίες που θα χρειαστεί το url books και book. 1
Jordan95 Δημοσ. 9 Μαΐου 2020 Μέλος Δημοσ. 9 Μαΐου 2020 Αν καταλαβα καλα απο αυτο που ειπε ο Μητσαρας, θα πρεπει να εχω τον εναν απο τους δυο Controller (BooksController) και π.χ. στο api/books?firstletter=a να φτιαξω το Route να δουλευει με τις παραμετρους του Request. Θα το δοκιμασω. Αν και μπερδευτηκα λιγο ευχαριστω πολυ και τους δυο!
Ponous Δημοσ. 9 Μαΐου 2020 Δημοσ. 9 Μαΐου 2020 Μπορείς να κάνεις την ίδια δουλειά με 1 controller. Και γενικά στη Laravel δεν συνηθίζουμε να ονομάζουμε controllers χρησιμοποιώντας πληθυντικό αριθμό. Μπορεί το route σου να είναι books αλλά ο controller να είναι BookController. Συνήθως τα routes είναι στον πληθυντικό αριθμό σε τέτοιες περιπτώσεις(δλδ books/title) Τώρα κατά πόσο θες να περάσεις το πρώτο γράμμα ως query ή ως διαφορετικό route το αφήνω σε σένα. Αφού το έχεις ως ξεχωριστό route θα μείνω σε αυτό. Γενικά μπορείς να δηλώσεις ξεχωριστά τα routes σου ως // web.php ή εκεί όπου δηλώνεις τα routes σου // Περισσότερες πληροφορίες δες documentation για wildcards & routing // Έστω πως έχεις συνάρτηση στον controller getByFirstLetter($letter) Route::get('/books/{letter}', 'BookController@getByFirstLetter'); Route::get('/book/{book-title}' , 'BookController@show'); Αλλά και πάλι δεν συμφωνώ πολύ με την ιδέα. Άμα δεν θα έχω κατηγορίες ως προς το γράμμα και το χρειάζομαι αυτό μόνο για search θα έκανα αυτό που είπε ο Μητσάρας. Συνήθως όταν έχουμε να κάνουμε μια αναζήτηση βάζουμε GET parameters στο url( ?parametros_edo=mia_timi&defteri_parametros=alli_timi&triti......) Αύριο μπορεί να θες να ψάξεις αυτά που ξεκινούν με ΑΒ και τελειώνουν σε Σ... 1
Jordan95 Δημοσ. 9 Μαΐου 2020 Μέλος Δημοσ. 9 Μαΐου 2020 Ευχαριστω φιλε! Οσο το σκεφτομαι συμφωνω μαλλον. Οσον αφορα τον πληθυντικο ειχα ξεκινησει απο αυτο το Laracast, οπου οταν φτανει στους Controllers επιλεγει PostsController αντι για PostController. Τωρα που το εψαξα ειδα οτι γενικα η συμβαση ειναι ο ενικος, ευχαριστω και για αυτο!
MitsarasAth Δημοσ. 9 Μαΐου 2020 Δημοσ. 9 Μαΐου 2020 2 ώρες πριν, Jordan95 είπε Αν καταλαβα καλα απο αυτο που ειπε ο Μητσαρας, θα πρεπει να εχω τον εναν απο τους δυο Controller (BooksController) και π.χ. στο api/books?firstletter=a να φτιαξω το Route να δουλευει με τις παραμετρους του Request. Θα το δοκιμασω. Αν και μπερδευτηκα λιγο ευχαριστω πολυ και τους δυο! ναι εννοθσα εναν controller να εχεις , πχ αν ειχες και authors, θα ειχες δυο controller, authorscontroller και bookscontroller και εκει θα εβαζες τις λειτουργιες που κανει η καθε οντοτητα. ριξε μια ματια και εδω. https://restfulapi.net/resource-naming/ Αναφορά σε κείμενο Use forward slash (/) to indicate hierarchical relationships The forward slash (/) character is used in the path portion of the URI to indicate a hierarchical relationship between resources. e.g. http://api.example.com/device-management http://api.example.com/device-management/managed-devices http://api.example.com/device-management/managed-devices/{id} http://api.example.com/device-management/managed-devices/{id}/scripts http://api.example.com/device-management/managed-devices/{id}/scripts/{id} Αναφορά σε κείμενο Use query component to filter URI collection Many times, you will come across requirements where you will need a collection of resources sorted, filtered or limited based on some certain resource attribute. For this, do not create new APIs – rather enable sorting, filtering and pagination capabilities in resource collection API and pass the input parameters as query parameters. e.g. http://api.example.com/device-management/managed-devices http://api.example.com/device-management/managed-devices?region=USA http://api.example.com/device-management/managed-devices?region=USA&brand=XYZ http://api.example.com/device-management/managed-devices?region=USA&brand=XYZ&sort=installation-date προφανως θα δεις πολλες παραλλαγες σε χωρο εργασιας πανω σε σχεση με το αρθρο , πολλες περιπτωσεις πχ ολα τα κανουν με post , η δεν ακολουθουν τα Naming conventions. 1
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα