【问题标题】:laravel controller new method global variablelaravel 控制器新方法全局变量
【发布时间】:2018-10-24 18:02:12
【问题描述】:

我想在我的控制器中创建我的模型的一个实例,并在我需要的每个地方使用它

我使用这个代码:

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');
}

}

我最初认为这是安全问题,但在我的想法中,这与我的想法无关

【问题讨论】:

    标签: php laravel eloquent object-oriented-analysis


    【解决方案1】:

    我不明白你的用例但是..你可以使用类的构造器来这样做:

    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();
        }
    }
    

    【讨论】:

    • @mahdidarvishiyan 很高兴为您提供帮助。检查this articlethis other one 以了解存储库模式。您现在可以将问题标记为已回答。祝你有美好的一天。
    • @mahdidarvishiyan 您可以将问题标记为已解决 +1。
    【解决方案2】:

    当然你不能在 PHP 中你不能调用一个方法来实例化一个类成员,即使它是一个静态方法或者在构造函数中初始化它

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

    或者更好地使用 Laravel 中的依赖注入模式 (Container) 来避免创建访问模型的多个实例,请参阅文档:https://laravel.com/docs/5.7/container

    【讨论】:

      猜你喜欢
      • 2015-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多