Я хочу сделать экземпляр моей модели в моем контроллере и использовать его везде, где мне нужно
Я использую этот код:
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');
}
}
я сначала подумал, что это проблема безопасности, но в моей идее это не имеет отношения к моей идее
Я не понимаю ваш вариант использования, но … вы можете использовать конструктор класса для этого:
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();
}
}
Конечно, вы не можете в PHP, вы не можете вызвать метод для создания экземпляра класса, даже если это статический метод, или инициализировать его в конструкторе.
class AccessController extends Controller{
public $test ;
public function __construct()
{
$this->test= new Access();
}
}
Или гораздо лучше использовать шаблон внедрения зависимостей (Container) в Laravel, чтобы избежать создания нескольких экземпляров модели доступа, см. Документы: https://laravel.com/docs/5.7/container