контроллер laravel новый метод глобальная переменная - PullRequest
0 голосов
/ 24 октября 2018

Я хочу создать экземпляр моей модели в моем контроллере и использовать его везде, где мне нужно

Я использую этот код:

public $test = new Access();

, но это ошибка, которую я не могувыясните, почему я продолжал получать эту ошибку:

выражение не допускается в качестве значения по умолчанию для поля

, и это мой код контроллера:

<?php
namespace App\Http\Controllers;
 use App\Models\Access;
use Illuminate\Http\Request;
classAccessController extends Controller{
private $table = 'accesses';
public $test = new Access();
/**
 * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
 */
public function index()
{
    $table = $this->table;
    $accesses = (new  Access())->index($table);
    return view('index', compact('accesses'));
}


/**
 * @param Request $request
 * @return \Illuminate\Http\RedirectResponse
 */
public function store(Request $request)
{

    $access = new Access();
    $request->validate([
        'can_select' => 'required|boolean',
        'can_delete' => 'required|boolean',
        'can_edit' => 'required|boolean',
        'can_insert' => 'required|boolean',
        'role_id' => 'required|integer|max:2',
        'module_id' => 'required|integer|max:3',
    ]);

    $access->can_select = $request->get('can_select');
    $access->can_delete = $request->get('can_delete');
    $access->can_edit = $request->get('can_edit');
    $access->can_insert = $request->get('can_insert');
    $access->role_id = $request->get('role_id');
    $access->module_id = $request->get('module_id');


    $attributes = array('can_select', 'can_delete', 'can_edit', 'can_insert', 'role_id', 'module_id');
    $options = array($access->can_select, $access->can_delete, $access->can_edit, $access->can_insert, $access->role_id, $access->module_id);
    $table = $this->table;
    (new Access())->store($table, $attributes, $options);
    return redirect('accesses')->with('success', 'Information has been  inserted');
}

/**
 * @param $id
 * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
 */
public function edit($id)
{
    $access = Access::find($id);
    return view('update', compact('access', 'id'));
}

/**
 * @param Request $request
 * @param $id
 * @return \Illuminate\Http\RedirectResponse
 */
public function update(Request $request, $id)
{
    $access = Access::find($id);
    $request->validate([
        'can_select' => 'required|boolean',
        'can_delete' => 'required|boolean',
        'can_edit' => 'required|boolean',
        'can_insert' => 'required|boolean',
        'role_id' => 'required|integer|max:2',
        'module_id' => 'required|integer|max:3',
    ]);
    $access->can_select = $request->get('can_select');
    $access->can_delete = $request->get('can_delete');
    $access->can_edit = $request->get('can_edit');
    $access->can_insert = $request->get('can_insert');
    $access->role_id = $request->get('role_id');
    $access->module_id = $request->get('module_id');

    $attributes = array('can_select', 'can_delete', 'can_edit', 'can_insert', 'role_id', 'module_id');
    $options = array($access->can_select, $access->can_delete, $access->can_edit, $access->can_insert, $access->role_id, $access->module_id);
    $object = $access;
    $table = $this->table;
    (new  Access())->updates($table, $object, $attributes, $options);
    return redirect('accesses')->with('success', 'Information has been updated successfully!!');
}

/**
 * @param $id
 * @return \Illuminate\Http\RedirectResponse
 */
public function destroy($id)
{
    $access = Access::find($id);
    $object = $access;
    $table = $this->table;
    (new Access())->erase($table, $object);
    return redirect('accesses')->with('success', 'Information has been  deleted');
}

}

Сначала я подумал, что это проблема безопасности, но в моей идее это неуместно в моей идее

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

Конечно, вы не можете в PHP, вы не можете вызвать метод для создания экземпляра класса, даже если это статический метод, либо инициализировать его в конструкторе

class AccessController extends Controller{
    public $test ;
    public function __construct()
    {
      $this->test= new Access();
    }
}

Или гораздо лучше использовать зависимостьшаблон внедрения (контейнер) в Laravel, чтобы избежать создания нескольких экземпляров модели доступа, см. в документах: https://laravel.com/docs/5.7/container

0 голосов
/ 24 октября 2018

Я не понимаю ваш вариант использования, но ... вы можете использовать конструктор класса для этого:

class ACoolController extends Controller {

    protected $access;

    /**
     * ACoolController constructor.
     *
     */
    public function __construct()
    {
        $this->access = new Access();
    }

    public function aCoolFunction()
    {
        // do something with your variable
        $this->access->someMethodOfYourModel();
    }
}
...