我的问题与Voyager管理面板中的控制器有关。例如,我使用迁移创建了一个表。它的名字是“组”,然后我创建了面包,并将其添加到旅行者的菜单中。
我在\resources\views\vendor\voyager中创建了一个名为"groups“的文件夹,然后创建了两个文件来覆盖该视图。
但我不知道控制器在哪里。我用php artisan make:controller GroupsController创建了控制器。我猜这个控制器和航行者控制器没有关系。
我想要更改索引或创建方法,并将一些数据传递给控制器中的视图,但我不知道它在哪里。
我在\vendor\tcg\voyager\src\Http\Controllers中创建了一个控制器,它的名称是VoyagerGroupsController.php,但是当我在其中创建类和索引方法时,它不起作用。
如何为“组”创建控制器并将数据传递给视图?
发布于 2016-12-15 19:19:09
每当我们在voyager中创建一个表时,Voyager都称之为datatype。对于我们创建的所有表/数据类型,Voyager用户只有一个控制器控制器位于** VoyagerBreadController.php \tcg\voyager\src\Http\VoyagerBreadController.php**。
例如,如果我创建了一个名为brands的表。Laravel将使用控制器VoyagerBreadController.
但是使用或指向此控制器的路由在哪里呢?路径位于文件vendor\tcg\voyager\routes\voyager.php.中在此文件中,找到以下行:
try {
foreach (\TCG\Voyager\Models\DataType::all() as $dataTypes) {
Route::resource($dataTypes->slug, $namespacePrefix.'VoyagerBreadController');
}
} catch (\InvalidArgumentException $e) {
throw new \InvalidArgumentException("Custom routes hasn't been configured because: ".$e->getMessage(), 1);
} catch (\Exception $e) {
// do nothing, might just be because table not yet migrated.
}在我的版本中,这些行位于第29到37行之间。
如你所见,上面的代码正在获取我们所有的数据类型,并为我们的表/数据类型创建一个资源路由。
现在,如果我想用覆盖这个路由,并创建一个路由来使用我自己的控制器来执行特定的操作。例如,如果我想为brands/create url创建一条路由。我可以通过在上面的代码下面(即在第37行之后)添加以下行(my route)来完成此操作:
Route::get('brands/create', function(){return 'abc';})->name('brands.create');或者您可以通过在旅行者::routes()之后在routes\web.php中添加以下行来执行相同的操作;
Route::get('brands/create', function(){return 'abc';})->name(**'voyager.brands.create'**);发布于 2018-10-18 17:28:47
因为它现在使用的是你的App控制器,而不是Voyager控制器,所以你必须覆盖你的完整控制器
喜欢
在config/voyager.php中添加
'controllers' => [
'namespace' => 'App\\Http\\Controllers',
],在应用程序/控制器中创建新的控制器,如MyBreadController.php
<?php
namespace App\Http\Controllers;
class MyBreadController extends \TCG\Voyager\Http\Controllers\Controller
{
//code here
}
app/Providers/AppServiceProvider.php
use TCG\Voyager\Http\Controllers\VoyagerBreadController;
use App\Http\Controllers\MyBreadController;
public function register()
{
$this->app->bind(VoyagerBreadController::class, MyBreadController::class);
//
}发布于 2016-12-17 17:57:59
我添加了Route::get('groups','GroupsController@index'),就像您在routes/web.php中所说的那样
像这样
Route::group('prefix‘=> 'admin',function () {旅行者::routes();
Route::get('groups', 'GroupsController@index');});
并将这些行添加到index方法中。
公共函数索引(请求$request){
// GET THE SLUG, ex. 'posts', 'pages', etc.
$slug = $this->getSlug($request);
// GET THE DataType based on the slug
$dataType = DataType::where('slug', '=', $slug)->first();
// Check permission
Voyager::can('browse_'.$dataType->name);
// Next Get the actual content from the MODEL that corresponds to the slug DataType
$dataTypeContent = (strlen($dataType->model_name) != 0)
? app($dataType->model_name)->latest()->get()
: DB::table($dataType->name)->get(); // If Model doest exist, get data from table name
$view = 'voyager::bread.browse';
if (view()->exists("voyager::$slug.browse")) {
$view = "voyager::$slug.browse";
}
return view($view, compact('dataType', 'dataTypeContent'));
}但是getSlug方法不起作用。此错误将在GroupsController.php第23行中显示:尝试获取非对象的属性
我猜在重写控件后,getSlug()不起作用,我必须手动设置$slug = 'groups';
https://stackoverflow.com/questions/41147381
复制相似问题