Форум программистов, компьютерный форум, киберфорум
PHP: Laravel
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.66/65: Рейтинг темы: голосов - 65, средняя оценка - 4.66
1 / 1 / 0
Регистрация: 14.03.2016
Сообщений: 54

Как правильно подгрузить свои классы и функции в laravel ?

23.03.2016, 22:01. Показов 12044. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Например у нас есть controller в котором методы для страницы регистрации, авторизации личного кабинета. Есть класс модели User управляющий таблицей users на основе active record
Допустим я хочу подключить класс UserAccount для внутреннего счета который не будет laravel'ой моделью, то есть не будет наследоватся как extends Model а чисто мой интерфейс.. может вообще голые функции без класса захочу подключить, хотя и вряд ли. И хочу вызывать эти классы/функции в controller?

Как это верно сделать? Аналогом require_once или как то еще? Хочется как проще...
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.03.2016, 22:01
Ответы с готовыми решениями:

Как правильно биндить свои классы к TreeView
Привет всем :) Я не могу понять, как правильно биндить свои классы к TreeView. вот так у меня отображается только первый уровень дерева и...

Как правильно архивировать laravel 5.5 приложение?
Всем привет,* Подскажите как правильно архивировать laravel 5.5 приложение - если архивировать весь проект - то получается огромный...

Как правильно сделать структуру в Laravel не нарушая MVC?
Добрый день.Первый раз работаю с Laravel,читаю много информации в Интернете, и меня смущает,то в что МНОГО информации о том,что данные со...

7
165 / 150 / 58
Регистрация: 15.06.2013
Сообщений: 1,107
24.03.2016, 14:16
В папке app создать любую папку, а в ней создавать любые классы. Не забыть в классах прописать namespace. Подключать как захотите, хоть через use, хоть по полному пути.
1
1 / 1 / 0
Регистрация: 14.03.2016
Сообщений: 54
24.03.2016, 21:12  [ТС]
Сделал как то так

PHP Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
<?php
 
namespace App\MyCustom;
 
use DB;
class Trans
{
  public function Run()
  {
     return 'run'; 
  }
}
И затем подключаю

use App\MyCustom\Trans;

вроде работает
1
 Аватар для tarasalk
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
25.03.2016, 08:47
Ну это самый просто вариант. Но скорее всего вам придется создавать объект этого класса в куче разных мест, а это создает сильно связанный код.
Более крутой вариант, через сервис провайдеры.
0
1 / 1 / 0
Регистрация: 14.03.2016
Сообщений: 54
26.03.2016, 00:03  [ТС]
В общем решил попробовать все таки использовать laravel модели для таблиц и orm, в сочетании с db raw где по другому не получается.

Но тут возник такой вопрос.

Допустим в контроллере, мне нужно скажем принять платеж от юзера, оформить ему подписку.
Да я использую для этого объекты моделей laravel например так:


PHP Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
                               $amount = 9;  
                DB::beginTransaction();
                $balance_arr =  DB::select("select ub.balance from users_balance ub where ub.user_id =? ", [$user->id]);
                $balance = 0;
                if(isset($balance_arr[0]))
                {
                    $balance = $balance_arr[0]->balance;
                }
                //dd($balance);
                $new_balance = $balance - $amount;
                
                $trans = Trans::create([
                    'type' => 2,
                    'subtype' => 3,
                    'amount' => $amount,
                    'balance' => $new_balance,
                    'user_id' => $user->id
                ]);
                $userBalance = UserBalance::updateOrCreate(['user_id' => $user->id], ['balance' => $new_balance]);
                
                DB::commit();
Но пусть я хочу все это спрятать в какой то метод. Ну скажем payFromUserBalance() куда такой метод правильно было бы запихнуть, в какой то из классов который наследует от Model и моделирует таблицу. Ну например в Users или Trans. Или лучше создавать для таких нужд отдельные классы без наследования от Model Что то вроде:

PHP Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
class payment 
{
  public payFromUserBalance()
  {
          $amount = 9;  
                DB::beginTransaction();
                $balance_arr =  DB::select("select ub.balance from users_balance ub where ub.user_id =? ", [$user->id]);
                $balance = 0;
                if(isset($balance_arr[0]))
                {
                    $balance = $balance_arr[0]->balance;
                }
                //dd($balance);
                $new_balance = $balance - $amount;
                
                $trans = Trans::create([
                    'type' => 2,
                    'subtype' => 3,
                    'amount' => $amount,
                    'balance' => $new_balance,
                    'user_id' => $user->id
                ]);
                $userBalance = UserBalance::updateOrCreate(['user_id' => $user->id], ['balance' => $new_balance]);
                
                DB::commit();
   }
 public function addToUserBalance()
 {
    
 }
 publuc function addSubscriton()
 {
 }
  // и другие методы выполняющие нужные действия. 
}

Конечно я понимаю, что есть разные паттерны в ООП и сделать можно по всякому..
Но вопрос скорее как во фреймворках принято. Писать всю эту бизнес логику в классах моделируюших таблицы, или в отдельных??
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
26.03.2016, 21:16
Цитата Сообщение от htchtc052 Посмотреть сообщение
Ну например в Users или Trans. Или лучше создавать для таких нужд отдельные классы без наследования от Model
Можно сделать repository. https://laravel.ru/posts/41
0
1 / 1 / 0
Регистрация: 14.03.2016
Сообщений: 54
27.03.2016, 19:45  [ТС]
А более простое и стандартной решение какое?
0
1 / 1 / 0
Регистрация: 14.03.2016
Сообщений: 54
06.05.2016, 13:49  [ТС]
На данный момент функционал связанный с данным кодом отлажен вместе с тестовым платежным шлюзом. Временно переключились на другой проект.

До Repository только сейчас начинаю читать разбираться.. Переписывать возможно и не буду, но думаю как бы было с ним..

Как я понимаю Repository обертывает запросы sql или orm для данной или связанной с ней таблиц, например в моем случае вместо:

PHP Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
DB::beginTransaction();
                $balance_arr =  DB::select("select ub.balance from users_balance ub where ub.user_id =? ", [$user->id]);
                $balance = 0;
                if(isset($balance_arr[0]))
                {
                    $balance = $balance_arr[0]->balance;
                }
                //dd($balance);
                $new_balance = $balance - $amount;
                 if(!$new_balance && !$allowminusbalance){
                 return false 
                }
                $trans = Trans::create([
                    'type' => 2,
                    'subtype' => 3,
                    'amount' => $amount,
                    'balance' => $new_balance,
                    'user_id' => $user->id
                ]);
                $userBalance = UserBalance::updateOrCreate(['user_id' => $user->id], ['balance' => $new_balance]);
                
                DB::commit();

Было бы, что то вроде:
PHP Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
DB::beginTransaction();
   $balance_arr =  $user_transaction_repository-> getBalance();
                $balance = 0;
                if(isset($balance_arr[0]))
                {
                    $balance = $balance_arr[0]->balance;
                }
                //dd($balance);
                $new_balance = $balance - $amount;
               if(!$new_balance && !$allowminusbalance){
                 return false 
                }
                $trans = $user_transaction_repository-> CreateDebitTransaction($amount, $new_balance); 
                 $trans = $user_transaction_repository-> UpdateBalance($new_balance);
То есть для users был бы репозиторий, который бы содержал методы где запросы к users или связанным таблицам, ну где нужен user_id, в него бы я запихнул все эти orm запросы.
Ну а в целом слой бизнес логики который определяет алгоритм типа:
Смотрим баланс
Вычитаем сумму
Если нельзя отрицательный баланс выдаем ошибку
Добавляем в транзакции и обновляем баланс

Все равно должен быть не в репозитории, а в отдельном классе, который просто подключается к контроллеру, ну или просто в методе контроллера если не заморачиваться.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.05.2016, 13:49
Помогаю со студенческими работами здесь

Как правильно перелинковать свои сайты?
Как лучше перелинковать десяток своих сайтов разной тематики? 1. Сделать ссылки со всех сайтов на все. Как я понимаю, это прямой путь к...

Как правильно обновлять свои OCX
При добавлении в свою OCX MyOcx.ocx новых контролов при последующей попытке подцепить ее через Refrences к новому проекту часто получаю...

Как правильно создавать свои собственные процедуры?
Подскажите, как правильно! Я прописываю процедуру (Delphi 7): Procedure TForm1.Ic(n:Integer;Icon:TIcon); А она мне при...

VS2010 - Как правильно распространять свои приложения ?
Добрый день! Подскажите пожалуйста, какой порядок действий для того, чтобы заставить программу работать на другом компе? Т.е. я на...

Как правильно размещать свои статьи с др. источников у себя на сайте?
Народ, как правильно ссылаться на пресс-релиз о моём сайте (хочу поместить текст размещённого в одной из служб размещения...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Линейное решение нелинейной задачи. Выведение формул LM (сам тоже могу, но хочу проверить LM)
Hrethgir 10.04.2025
В продолжение Эта LM дала ответ похожий на нормальный. Assistant qwen2. 5-14b-instruct . Сначала изображение (переделаю в лучший вид когда проверю что мне написала языковая модель). . .
Переменные в Python
py-thonny 10.04.2025
Переменная в программировании — это символическое имя, связанное с областью памяти, в которой хранится значение. Она позволяет получать доступ к данным через понятные человеку идентификаторы, а не. . .
Многопоточность в C#: Task и асинхронные операции
UnmanagedCoder 10.04.2025
Многопоточность позволяет выполнять несколько операций одновременно, что важно для решения двух основных задач: повышения скорости выполнения вычислительно-сложных операций и сохранения отзывчивости. . .
Линейное решение не линейной задачи (емкость вычислений в сравнении с традиционными решениями пока не определена).
Hrethgir 10.04.2025
В рамках предстоящих вычислений пришлось (да, я тоже знаю про корень числа, и про степеня, и прочие теоремы, но. . . ) найти способ нахождения отношения двух углов. . . .
Запуск контейнеров Docker на ARM64
Mr. Docker 09.04.2025
Появление таких решений, как Apple M1/ M2, AWS Graviton, Ampere Altra и Raspberry Pi, сделало использование ARM-систем обыденностью для многих разработчиков и DevOps-инженеров. При этом Docker,. . .
Vue SFC компонент на PHP с Fusion
Jason-Webb 09.04.2025
PHP на сервере и JavaScript на клиенте — классическое сочетание, которое, несмотря на свою эффективность, создает определенный когнитивный диссонанс при разработке. В этом контексте появляются. . .
TypeScript vs JavaScript: Отличия и когда что использовать
Reangularity 09.04.2025
JavaScript появился в 1995 году как творение Брендана Эйха и быстро стал основой интерактивности в вебе. За свою историю он прошел путь от простого языка для манипуляций с DOM до полноценной. . .
Подключение Kafka к Elasticsearch
Codd 09.04.2025
Apache Kafka и Elasticsearch — две мощные технологии, которые при совместном использовании создают эффективную платформу для обработки и анализа данных в реальном времени. Kafka, выступая в роли. . .
Реализации таймеров в Unity
GameUnited 09.04.2025
Время — важный ресурс любой игры. Разработка качественных игровых механик невозможна без грамотного управления временем, а таймеры выступают ключевым инструментом этого управления. Представьте себе. . .
Функции высшего порядка в JavaScript
run.dev 09.04.2025
Функции высшего порядка представляют собой один из фундаментальных камней функционального программирования в JavaScript. По сути, это функции, которые либо принимают другие функции в качестве. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер