Laravel 5.6 将 eloquent 模型作为参数传递给函数
Laravel 5.6 passing eloquent model as parameter to a function
我在 blade 表单上有一个选择控件,要通过此函数通过 ajax 刷新:
function getOpciones(tbName) {
$.get('/ajax/read-data/' + tbName, function(data){
return (data);
});
}
该函数采用一个字符串变量 'tbName',其中包含与控件相关的 table 的名称,并将其作为参数传递给路由:
Route::get('/ajax/read-data/{modelo}', 'AjaxController@readData');
然后controller应该获取参数{modelo},并检索其中的记录table:
use App\RegFiscal;
public function readData($modelo) {
$arreglo = $modelo::all();
return response($arreglo);
}
但是即使我用 'use App\RegFiscal' 引用模型,我得到的只是 laravel 日志中的这个错误:
2018-03-23 18:52:08] local.ERROR: exception
'Symfony\Component\Debug\Exception\FatalErrorException' with message
'Class 'RegFiscal' not found' in
C:\wamp64\www\laravel\cte\app\Http\Controllers\AjaxController.php:32
我是 Laravel 的新手,不用说我迷路了,我们将不胜感激。谢谢!
仅仅因为你 use App\RegFiscal
并不意味着 $modelo
与之关联。
不过,您可以使用 app("App\$modelo")
根据您从路由器获得的参数加载您的模型。您也不再需要 use App\RegFiscal
。
$arreglo = app("App\$modelo");
return response($arreglo::all());
这是假设您的模型存储在 Laravel 项目中的默认 app
目录中。如果不是,您可以将 "App\"
更改为它的存储位置。例如,如果您的模型在 app\models\modelname.php
中,它将是 "App\Models\$modelo"
.
您可以按照以下方式进行操作:
public function readData($modelo) {
$modelName = '\App' . '\' . $modelo;
$class = new $modelName();
arreglo = $class::all();
return response($arreglo);
}
对于那些像我一样想要将它注入构造函数的人,这里是如何做到的:
~$ php artisan make:provider MyProvider
然后像这样覆盖注册函数:
class MyProvider implements ServiceProvider {
/** @override */
public function register() {
$this->app->bind(ShapeInterface::class, function ($app) {
return new Square($app->make(MyModel::class));
});
}
}
ShapeInterface
是一个简单的接口,Square
是一个简单的class,它使用eloquent模型的构造函数参数实现形状接口。
class Square implements ShapeInterface {
private MyModel $model;
function __construct(MyModel $model) {
$this->model = $model;
}
...
}
我在 blade 表单上有一个选择控件,要通过此函数通过 ajax 刷新:
function getOpciones(tbName) {
$.get('/ajax/read-data/' + tbName, function(data){
return (data);
});
}
该函数采用一个字符串变量 'tbName',其中包含与控件相关的 table 的名称,并将其作为参数传递给路由:
Route::get('/ajax/read-data/{modelo}', 'AjaxController@readData');
然后controller应该获取参数{modelo},并检索其中的记录table:
use App\RegFiscal;
public function readData($modelo) {
$arreglo = $modelo::all();
return response($arreglo);
}
但是即使我用 'use App\RegFiscal' 引用模型,我得到的只是 laravel 日志中的这个错误:
2018-03-23 18:52:08] local.ERROR: exception 'Symfony\Component\Debug\Exception\FatalErrorException' with message 'Class 'RegFiscal' not found' in C:\wamp64\www\laravel\cte\app\Http\Controllers\AjaxController.php:32
我是 Laravel 的新手,不用说我迷路了,我们将不胜感激。谢谢!
仅仅因为你 use App\RegFiscal
并不意味着 $modelo
与之关联。
不过,您可以使用 app("App\$modelo")
根据您从路由器获得的参数加载您的模型。您也不再需要 use App\RegFiscal
。
$arreglo = app("App\$modelo");
return response($arreglo::all());
这是假设您的模型存储在 Laravel 项目中的默认 app
目录中。如果不是,您可以将 "App\"
更改为它的存储位置。例如,如果您的模型在 app\models\modelname.php
中,它将是 "App\Models\$modelo"
.
您可以按照以下方式进行操作:
public function readData($modelo) {
$modelName = '\App' . '\' . $modelo;
$class = new $modelName();
arreglo = $class::all();
return response($arreglo);
}
对于那些像我一样想要将它注入构造函数的人,这里是如何做到的:
~$ php artisan make:provider MyProvider
然后像这样覆盖注册函数:
class MyProvider implements ServiceProvider {
/** @override */
public function register() {
$this->app->bind(ShapeInterface::class, function ($app) {
return new Square($app->make(MyModel::class));
});
}
}
ShapeInterface
是一个简单的接口,Square
是一个简单的class,它使用eloquent模型的构造函数参数实现形状接口。
class Square implements ShapeInterface {
private MyModel $model;
function __construct(MyModel $model) {
$this->model = $model;
}
...
}