У меня
app / Библиотеки / Cart.php
app / Библиотеки / Currency.php
app / Библиотеки / SomeOther1.php
app / Библиотеки / SomeOther2.php
...
Во всех своих контроллерах я не хочу "использовать" и объявлять.
Я не хочу этого:
<?php
namespace App\PathToFolder;
use App\Libraries\Cart;
use App\Libraries\Currency;
class SomeController extends Controller
{
public someFunction()
{
$this->cart = new Cart;
$this->cart->add(...);
$this->cart->remove(...);
$this->cart->clear(...);
$this->currency = new Currency;
$this->currency->format(...);
}
я хочу этот
<?php
namespace App\PathToFolder;
class SomeController extends Controller
{
public someFunction()
{
$this->cart->add(...);
$this->cart->remove(...);
$this->cart->clear(...);
$this->currency->format(...);
}
Нет строк «пользование» и «новое». Как сделать? поставщик услуг? промежуточное ПО?
Это тоже допустимо:
$this->library->cart->add(...);
$this->library->cart->remove(...);
$this->library->cart->clear(...);
$this->library->currency->format(...);
вы должны использовать одно «использование» при использовании функции репозитория






Вы можете попробовать приведенный ниже код без use. Вместо этого добавьте пространство имен в экземпляр.
<?php
namespace App\PathToFolder;
class SomeController extends Controller
{
public someFunction()
{
$this->cart = new \App\Libraries\Cart;
$this->cart->add(...);
$this->cart->remove(...);
$this->cart->clear(...);
$this->currency = new \App\Libraries\Currency;
$this->currency->format(...);
}
обычно я буду делать вспомогательный класс, где вам не нужно загружать массивную функцию инициализации в ваш контроллер или базовый контроллер.
Я создал новые помощники по вызову папок и создал новое имя класса helpers.php
в разделе автозагрузки в composer.json добавьте в него свой вспомогательный класс ..
"autoload": {
...
"files": ["app/Helpers/helpers.php"]
},
запустить composer dumpautoload
и в классе helper.php .. см. образец ниже
if (! function_exists('get_cart')) {
function get_cart()
{
return new Cart();
}
}
Применение:
get_cart()->add(...);get_cart()->remove(...);
ИЛИ ЖЕ
ЕСЛИ вы не хотите использовать вспомогательный класс. Просто сделайте статический класс
Применение:
Cart::add(...)Cart::remove(...)
ИЛИ ЖЕ
используйте Черта характера, но все же вы используете $this в $this->cart->add
Ниже приведен еще один способ добиться этого, а не использовать свойства или файл композитора, как упоминалось другими.
Вы можете объявить и инициализировать переменную в родительском контроллере и использовать ее.
Например,
Ваш родительский контроллер в соответствии с вашим кодом
<?php
namespace App\Http\Controllers;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use App\Libraries\Cart;
use App\Libraries\Currency;
class Controller extends BaseController
{
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
private $cart;
private $currency;
public function __construct()
{
//blockio init
$this->cart = new Cart;
$this->currency = new Currency;
}
}
Теперь вы можете использовать эту функцию в своем контроллере следующим образом
<?php
namespace App\PathToFolder;
class SomeController extends Controller
{
public someFunction()
{
$this->cart->add(...);
$this->cart->remove(...);
$this->cart->clear(...);
$this->currency->format(...);
}
вы можете использовать черты для этого, но в чертах вы должны добавить
use ..., дайте мне знать, хотите ли вы этого, и я могу проинструктировать вас, как это сделать