В laravel 6 приложении я создал приложение фасада / Facades / MyFuncsClass. php:
<?php
namespace App\Facades;
use Illuminate\Support\Facades\Facade;
class MyFuncsClass extends Facade{
protected static function getFacadeAccessor() { return 'MyFuncsClass'; }
}
Но я получил ошибку:
"message": "Non-static method App\\Helpers\\MyFuncsClass::debToFile() should not be called
статически " ,
вызов из метода загрузки:
protected static function boot() {
parent::boot();
static::deleting(function($task) {
$hostel_image_image_path= Task::getTaskImagePath($task->id, $task->image);
MyFuncsClass::debToFile(print_r($hostel_image_image_path, true), '-9 $hostel_image_image_path::');
...
Есть ли способ избежать этой ошибки и запустить MyFuncsClass :: debToFile в методе загрузки?
MODIFIED : Конечно, я зарегистрировал свой фасад в config / app. php, блок «айдеров »:
...
App\Providers\MyFuncsClassProvider::class,
file app / Http / Helpers / MyFuncsClass. php имеет много открытых c методов, с заголовком:
<?php
namespace App\Helpers;
use Illuminate\Http\Request;
use Barryvdh\Debugbar\Facade as Debugbar;
use Carbon\Carbon;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\Storage;
class MyFuncsClass {
public $concat_str_max_length = 50;
public $m_concat_str_add_chars = '...';
public function debToFile($contents, string $descr_text = '', bool $is_sql = false, string $file_name = '')
{
try {
...
и в приложении / Providers / MyFuncsClassProvider. php:
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\App;
class MyFuncsClassProvider extends ServiceProvider
{
/**
* Register services.
*
* @return void
*/
public function register()
{
App::bind('MyFuncsClass', function()
{
return new \App\Helpers\MyFuncsClass;
});
}
/**
* Bootstrap services.
*
* @return void
*/
public function boot()
{
//
}
}
На самом деле я могу вызвать \ MyFuncsClass :: debToFile (хорошо, если не использовать методы stati c, например управляющие действия, но у меня возникает ошибка вызова метода загрузки stati c ...
MODIFIED # 2 : с фасадами в реальном времени https://laravel.com/docs/5.7/facades#real -time-facades определения, которые я пытался
<?php
namespace App;
use DB;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\Storage;
use App\Facades\MyFuncsClass;
use App\Http\Helpers\MyFuncsClassContainer; // Alias for my helper class
use Illuminate\Database\Eloquent\Model;
use Barryvdh\Debugbar\Facade as Debugbar;
class Task extends Model
{
use Sluggable;
protected $table = 'tasks';
protected $primaryKey = 'id';
}
protected static function boot() {
parent::boot();
static::deleting(function($task) {
$hostel_image_image_path= Task::getTaskImagePath($task->id, $task->image);
\Log::info( '-9 $hostel_image_image_path::' );
\Log::info( print_r($hostel_image_image_path, true) );
$myFuncsClassCore = factory(MyFuncsClassContainer::class)->create();
$myFuncsClassCore->debToFile(' debToFile string REDSA');
Бурь, но я получил ошибку:
Cannot declare class App\Helpers\MyFuncsClassContainer, because the name is already in use {"userId":1,"exception":"[object] (Symfony\\Component\\Debug\\Exception\\FatalErrorException
Я попытался переименовать мой вспомогательный класс в «MyFuncsCl assContainer », предполагая, что одно и то же имя для помощника и фасада может вызвать ошибку, но не удалось
Если есть способ исправить эту ошибку?
Спасибо!