Форум программистов, компьютерный форум, киберфорум
PHP: Laravel
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
 Аватар для Nekromio
0 / 0 / 0
Регистрация: 02.04.2019
Сообщений: 69

ООП в Laravel

05.11.2022, 09:08. Показов 721. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Подскажите пожалуйста, гуглю, листаю статьи, видео на ютубе, но ответа так и не встретил. (https://laravel.com/docs/9.x/c... in-content)
Как правильно использовать классы в ларавел? Правильно ли вообще следующие?
1. Создаём новый контроллер
ООП в Laravel

2. Создаём в нём нужный класс
ООП в Laravel

3. Подключаем этот контроллер к файлу, где собираемся использовать и объявляем объект.
А вот как правильно подключить?
ООП в Laravel



1) Как правильно подключить созданный класс?
2) В чём именно разница контроллера и модели? В двух словах
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.11.2022, 09:08
Ответы с готовыми решениями:

Laravel 5 ООП как сделать просто и красиво
Всем привет! Делаю биллинг на laravel и php, раньше с фреймворками не работал, с ООП безсистемно. Сейчас думаю над такой...

Вывод данных из ассоциативного многомерного массива ООП в Laravel
Здравствуйте! Появилась сложность с выводом рандомных данных из ассоциативного многомерного массива. Для справки - работаю через Laravel...

Installing laravel/laravel (v5.8.17) [ErrorException] mkdir(): Invalid path
Я только начинаю разбираться не судите строго. Пытаюсь установить laravel на XAMPPv3.2.4 командою "php composer.phar create-project...

18
Эксперт PHP
3886 / 3226 / 1351
Регистрация: 01.08.2012
Сообщений: 10,878
05.11.2022, 10:45
Цитата Сообщение от Nekromio Посмотреть сообщение
3. Подключаем этот контроллер к файлу, где собираемся использовать и объявляем объект.
Здесь пошло что-то не то.

Запрос прилетает в роутер (routes/web.php), где вы определяете обработчик каждой страницы. Это может быть просто функция:

PHP Скопировано
1
2
3
Route::get('/', function () {
    return 'Главная страница';
});
Или метод контроллера:

PHP Скопировано
1
2
3
use App\Http\Controllers\BaseController;
 
Route::get('/', [BaseController::class, 'getNameTicket']);
Контроллер может вернуть содержимое html шаблона (default.blade.php), а вот внутри шаблона "подключать" контроллер нет никакого смысла.

Всё это подробно описано в доке:
https://laravel.com/docs/9.x/routing
https://laravel.com/docs/9.x/controllers

Цитата Сообщение от Nekromio Посмотреть сообщение
2) В чём именно разница контроллера и модели? В двух словах
Вы про модель из MVC или модель Eloquent?

Если первое: по простому, контроллер решает, какие сервисы надо запустить и что вернуть браузеру клиента. А сервис, какой-нибудь CreateUser.php - это и есть слой модели.
1
 Аватар для Nekromio
0 / 0 / 0
Регистрация: 02.04.2019
Сообщений: 69
05.11.2022, 11:04  [ТС]
Цитата Сообщение от Jodah Посмотреть сообщение
Или метод контроллера
А если нужно подключить весь класс?

Цитата Сообщение от Jodah Посмотреть сообщение
Контроллер может вернуть содержимое html шаблона (default.blade.php)
Имеется ввиду всё содержимое default.blade.php ? А как такое можно сделать?

Пробежал сейчас две ссылки, нашёл вложение ресурсов, но видимо это не то
PHP Скопировано
1
2
3
use App\Http\Controllers\PhotoCommentController;
 
Route::resource('photos.comments', PhotoCommentController::class);
0
Эксперт PHP
3886 / 3226 / 1351
Регистрация: 01.08.2012
Сообщений: 10,878
05.11.2022, 11:52
Цитата Сообщение от Nekromio Посмотреть сообщение
А если нужно подключить весь класс?
Куда и зачем? Не понимаю вопрос.

Цитата Сообщение от Nekromio Посмотреть сообщение
Имеется ввиду всё содержимое default.blade.php ? А как такое можно сделать?
PHP Скопировано
1
2
3
Route::get('/', function () {
    return view('template.default.default');
});
Типа такого. В методе контроллера тоже самое.

Цитата Сообщение от Nekromio Посмотреть сообщение
Пробежал сейчас две ссылки
https://laravel.com/docs/9.x/blade
0
 Аватар для Nekromio
0 / 0 / 0
Регистрация: 02.04.2019
Сообщений: 69
05.11.2022, 13:17  [ТС]
Цитата Сообщение от Jodah Посмотреть сообщение
Куда и зачем? Не понимаю вопрос.
Ну вот у меня класс с 100500 методами. Для использования всех методов, надо подключать каждый метод отдельно?
0
Эксперт PHP
3886 / 3226 / 1351
Регистрация: 01.08.2012
Сообщений: 10,878
05.11.2022, 14:03
Nekromio, обычно много не методов, а контроллеров. Допустим CartController содержит все обработчики запросов, связанных с корзиной, NewsController - с новостями и т.д.

Цитата Сообщение от Nekromio Посмотреть сообщение
надо подключать каждый метод отдельно?
Обычно да:

PHP Скопировано
1
2
3
4
5
use App\Http\Controllers\BaseController;
 
Route::get('/', [BaseController::class, 'getMain']);
Route::get('/contacts', [BaseController::class, 'getContacts']);
Route::get('/about', [BaseController::class, 'getAbout']);
Кроме API, там одной строкой можно добавить несколько шаблонных маршрутов:
https://laravel.com/docs/9.x/c... ontrollers
1
 Аватар для Nekromio
0 / 0 / 0
Регистрация: 02.04.2019
Сообщений: 69
05.11.2022, 17:00  [ТС]
Цитата Сообщение от Jodah Посмотреть сообщение
Nekromio, обычно много не методов, а контроллеров. Допустим CartController содержит все обработчики запросов, связанных с корзиной, NewsController - с новостями и т.д.


Обычно да:

PHP Скопировано
1
2
3
4
5
use App\Http\Controllers\BaseController;
 
Route::get('/', [BaseController::class, 'getMain']);
Route::get('/contacts', [BaseController::class, 'getContacts']);
Route::get('/about', [BaseController::class, 'getAbout']);
Кроме API, там одной строкой можно добавить несколько шаблонных маршрутов:
https://laravel.com/docs/9.x/c... ontrollers
То есть создаём контроллер с классом, что имеет 147 медотов и к одной странице подключаем 147 раз каждый метод по отдельности?
0
Эксперт PHP
3886 / 3226 / 1351
Регистрация: 01.08.2012
Сообщений: 10,878
05.11.2022, 17:38
Nekromio, ну если именно так ставить вопрос - тогда да.

А что там за методы у вас? Если мы говорим про 147 товаров, то хватит и 1 метода:

PHP Скопировано
1
2
3
Route::get('/products/{id}', function ($id) {
    return 'Товар ' . $id;
})->where('id', '.*');
Функция будет вызвана для всех URL соответствующих шаблону, например /products/125 или /products/iphone-16gb.
0
 Аватар для Nekromio
0 / 0 / 0
Регистрация: 02.04.2019
Сообщений: 69
06.11.2022, 16:36  [ТС]
Не знаю на сколько это правильно, но если прописать в нужном шаблоне
Code Скопировано
1
2
3
<?php
    use App\Http\Controllers\ИмяКонтроллера;
?>
То можно создавать экземпляр класса и с ним работать уже непосредственно в файле. Но на сколько это уместно ?
0
Эксперт PHP
3886 / 3226 / 1351
Регистрация: 01.08.2012
Сообщений: 10,878
06.11.2022, 16:42
Цитата Сообщение от Nekromio Посмотреть сообщение
Но на сколько это уместно ?
Это не имеет никакого смысла. В документации подробно описано, зачем нужны контроллеры и как их использовать.
0
 Аватар для Nekromio
0 / 0 / 0
Регистрация: 02.04.2019
Сообщений: 69
06.11.2022, 18:02  [ТС]
Цитата Сообщение от Jodah Посмотреть сообщение
Это не имеет никакого смысла. В документации подробно описано, зачем нужны контроллеры и как их использовать.
Так может, тогда нужен не контроллер? Так как задача в создании класса и его использования в других файлах. Подскажите в какую сторону тогда надо смотреть.

На данный момент создал котроллер, создал класс и использовал его экземпляр на другой странице.
0
Эксперт PHP
3886 / 3226 / 1351
Регистрация: 01.08.2012
Сообщений: 10,878
06.11.2022, 19:33
Цитата Сообщение от Nekromio Посмотреть сообщение
Так как задача в создании класса и его использования в других файлах.
Какую задачу будет выполнять этот класс?
0
 Аватар для Nekromio
0 / 0 / 0
Регистрация: 02.04.2019
Сообщений: 69
06.11.2022, 20:05  [ТС]
Цитата Сообщение от Jodah Посмотреть сообщение
Какую задачу будет выполнять этот класс?
Брать определенный файл сервера, считывать и выводить нужные данные из него
0
Эксперт PHP
3886 / 3226 / 1351
Регистрация: 01.08.2012
Сообщений: 10,878
06.11.2022, 22:35
Nekromio, ок, начнём со следующего. Создаёте класс App\Services\FileService.php, внутри:

PHP Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
 
namespace App\Services;
 
class FileService
{
    public function getInfo1(): string
    {
        return 'Информация 1';
    }
    
    public function getInfo2(): string
    {
        return 'Информация 2';
    }
}
Далее в роутах:

PHP Скопировано
1
2
3
4
5
6
7
8
9
use App\Services\FileSerivce;
 
Route::get('/info1', function (FileService $service) {
    return $service->getInfo1();
});
 
Route::get('/info2', function (FileService $service) {
    return $service->getInfo2();
});
Оно?
0
 Аватар для Nekromio
0 / 0 / 0
Регистрация: 02.04.2019
Сообщений: 69
06.11.2022, 22:46  [ТС]
Цитата Сообщение от Jodah Посмотреть сообщение
Nekromio, ок, начнём со следующего. Создаёте класс App\Services\FileService.php, внутри:

PHP Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
 
namespace App\Services;
 
class FileService
{
    public function getInfo1(): string
    {
        return 'Информация 1';
    }
    
    public function getInfo2(): string
    {
        return 'Информация 2';
    }
}
Далее в роутах:

PHP Скопировано
1
2
3
4
5
6
7
8
9
use App\Services\FileSerivce;
 
Route::get('/info1', function (FileService $service) {
    return $service->getInfo1();
});
 
Route::get('/info2', function (FileService $service) {
    return $service->getInfo2();
});
Оно?
Так а если на одну страницу надо 10 методов из одного класса?
0
Эксперт PHP
3886 / 3226 / 1351
Регистрация: 01.08.2012
Сообщений: 10,878
06.11.2022, 22:57
Nekromio, вариант 1:

PHP Скопировано
1
2
3
4
5
6
7
Route::get('/', function (FileService $service) {
    return view('main_page', [
        'info1' => $service->getInfo1(),
        'info2' => $service->getInfo2(),
        'info3' => $service->getInfo3(),
    ]);
});
И шаблон:
HTML5 Скопировано
1
2
3
<div>{{ $info1 }}</div>
<div>{{ $info2 }}</div>
<div>{{ $info3 }}</div>
Вариант 2:
PHP Скопировано
1
2
3
4
5
Route::get('/', function (FileService $service) {
    return view('main_page', [
        'service' => $service,
    ]);
});
HTML5 Скопировано
1
2
3
<div>{{ $service->getInfo1() }}</div>
<div>{{ $service->getInfo2() }}</div>
<div>{{ $service->getInfo3() }}</div>
Ну и ещё вариантов кучу можно придумать, зависит уже от конкретной реализации.
1
 Аватар для tarasalk
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
07.11.2022, 08:24
Только лучше в шаблон данные передавать, а не сервисы.
0
 Аватар для Nekromio
0 / 0 / 0
Регистрация: 02.04.2019
Сообщений: 69
07.11.2022, 12:35  [ТС]
Цитата Сообщение от tarasalk Посмотреть сообщение
Только лучше в шаблон данные передавать, а не сервисы.
Можно поподробнее?
0
 Аватар для tarasalk
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
07.11.2022, 23:52
Цитата Сообщение от Nekromio Посмотреть сообщение
Можно поподробнее?
Это первый вариант Jodah.

Цитата Сообщение от Nekromio Посмотреть сообщение
Так а если на одну страницу надо 10 методов из одного класса?
Скорее всего вы делаете что-то не так.

Мне кажется вам пока рано фреймворки учить.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.11.2022, 23:52
Помогаю со студенческими работами здесь

Как использовать на сервере Laravel внутри папки Laravel?
Внутри папки Laravel 7 на сервере Ubuntu 16.04 лежит папка с Laravel 7. Родительский проект работает прекрасно, и открывается по такой...

Объединить laravel и Форум (Laravel + XenForo)
Здравствуйте! Суть: Есть магазин на Laravel и есть Форум на XenForo Нужно объединить профиль форума и магазина + сделать как...

Где лучше учить ООП PHP ? И зачем нужен ООП
Здравствуйте ! До того как начел учить ООП я кайфовал от программирования, после того как начел учить ООП нет мотивации ну и т.д общем...

Изучаю Python, сейчас учу основы ООП, где можно найти задачи по ООП
Скиньте пожалуйста источники с задачами(желательно на русском)

ООП. Переделать фрагмент программы под ООП
Есть небольшой фрагмент из программы, который необходимо перестроить под ООП(создать класс), для удобного испольщования. Можно ли изменить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Не удержался от оценки концепции двигателя Стирлинга.
Hrethgir 03.04.2025
Сколько не пытался - она выдавала правильные схемы, причём случайно рисовала горячие области в середине, холодные по краям, трубки с краёв в низ и магнит в соединяющей, но при этой выдавала описание. . .
Метод с двумя буферами (или double buffering) или ping-pong buffering
Hrethgir 02.04.2025
Из ответов LM модели. Метод, который предполагает использование двух массивов для хранения промежуточных результатов сложения векторов, обычно применяется в сценариях, где необходимо минимизировать. . .
На любовном киберфронте
Alexander-7 01.04.2025
Недавно на одном малоизвестном сайте знакомств мною заинтересовалась девушка: «Текст немного странный. Но, судя по адресу почты, иностранка», – подумал я. Поколебавшись пару суток, я ответил ей:. . .
Как работает Node.js изнутри
run.dev 29.03.2025
Node. js изменил подход к разработке веб-приложений, позволив использовать JavaScript не только на стороне клиента, но и на сервере. Созданный в 2009 году Райаном Далем, этот открытый,. . .
Моки в Python: Mock Object Library
py-thonny 29.03.2025
Тестирование кода требует особого подхода, когда речь идёт о компонентах, взаимодействующих с внешним миром. Мы часто сталкиваемся с непредсказуемостью HTTP-запросов, чтением данных из базы или. . .
JavaScript: Управление памятью и улучшение производительности
run.dev 29.03.2025
В отличие от низкоуровневых языков программирования, JavaScript не требует ручного выделения и освобождения памяти. Здесь работает автоматический сборщик мусора, который определяет, какие объекты. . .
Мультитенантная архитектура со SpringBoot и PostgreSQL
ArchitectMsa 29.03.2025
SaaS-приложения редко обслуживают одного клиента и обычно они должны поддерживать множество организаций, каждая из которых работает в своём изолированном пространстве. Мультитенантная архитектура. . .
std::span в C++: Производительность и лучшие практики
NullReferenced 28.03.2025
std::span — одно из самых недооценённых нововведений стандарта C++20, которое радикально меняет подход к работе с непрерывными последовательностями данных. По сути, это невладеющее представление. . .
Многопоточность в C#: Threadpool
UnmanagedCoder 28.03.2025
Пул потоков в C# — это коллекция заранее созданных и готовых к использованию потоков, которые находятся в распоряжении приложения. Вместо того чтобы создавать и уничтожать потоки для каждой небольшой. . .
Вопросы на собеседованиях по микросервисам
ArchitectMsa 27.03.2025
Работодатели ищут не просто разработчиков, знающих базовые концепции, а специалистов, разбирающихся в тонкостях масштабирования, отказоустойчивости и производительности. Сейчас на первый план выходят. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер