我在刀片表单上有一个选择控件,可以通过此函数通过ajax刷新:
function getOpciones(tbName) {
$.get('/ajax/read-data/' + tbName, function(data){
return (data);
});
}
该函数接受一个字符串变量'tbName',其中包含控件所关联的表的名称,并将其作为参数传递给路径:
Route::get('/ajax/read-data/{modelo}', 'AjaxController@readData');
然后控制器应获取参数{modelo},并检索该表中的记录:
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:异常 带有消息的'Symfony \ Component \ Debug \ Exception \ FatalErrorException' '未找到'等级'RegFiscal' C:\ wamp64 \ WWW \ laravel \ CTE \应用\ HTTP \控制器\ AjaxController.php:32
我是Laravel的新手,所以不用说我迷失了,任何帮助都会非常感激。谢谢!
答案 0 :(得分:1)
仅仅因为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"
。
答案 1 :(得分:1)
您可以执行以下操作:
public function readData($modelo) {
$modelName = '\App' . '\\' . $modelo;
$class = new $modelName();
arreglo = $class::all();
return response($arreglo);
}
答案 2 :(得分:0)
对于像我这样想在构造函数中注入它的人,这里是如何做到的:
~$ 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
是一个简单的类,它使用 eloquent 模型的构造函数参数实现了形状接口。
class Square implements ShapeInterface {
private MyModel $model;
function __construct(MyModel $model) {
$this->model = $model;
}
...
}