首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Voyager - laravel管理面板

Voyager - laravel管理面板
EN

Stack Overflow用户
提问于 2016-12-15 00:22:12
回答 3查看 4.8K关注 0票数 1

我的问题与Voyager管理面板中的控制器有关。例如,我使用迁移创建了一个表。它的名字是“组”,然后我创建了面包,并将其添加到旅行者的菜单中。

我在\resources\views\vendor\voyager中创建了一个名为"groups“的文件夹,然后创建了两个文件来覆盖该视图。

但我不知道控制器在哪里。我用php artisan make:controller GroupsController创建了控制器。我猜这个控制器和航行者控制器没有关系。

我想要更改索引或创建方法,并将一些数据传递给控制器中的视图,但我不知道它在哪里。

我在\vendor\tcg\voyager\src\Http\Controllers中创建了一个控制器,它的名称是VoyagerGroupsController.php,但是当我在其中创建类和索引方法时,它不起作用。

如何为“组”创建控制器并将数据传递给视图?

EN

回答 3

Stack Overflow用户

发布于 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.中在此文件中,找到以下行:

代码语言:javascript
复制
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)来完成此操作:

代码语言:javascript
复制
Route::get('brands/create', function(){return 'abc';})->name('brands.create');

或者您可以通过在旅行者::routes()之后在routes\web.php中添加以下行来执行相同的操作;

代码语言:javascript
复制
Route::get('brands/create', function(){return 'abc';})->name(**'voyager.brands.create'**);
票数 3
EN

Stack Overflow用户

发布于 2018-10-18 17:28:47

因为它现在使用的是你的App控制器,而不是Voyager控制器,所以你必须覆盖你的完整控制器

喜欢

在config/voyager.php中添加

代码语言:javascript
复制
'controllers' => [
'namespace' => 'App\\Http\\Controllers',
],

在应用程序/控制器中创建新的控制器,如MyBreadController.php

代码语言:javascript
复制
<?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);
//
}
票数 0
EN

Stack Overflow用户

发布于 2016-12-17 17:57:59

我添加了Route::get('groups','GroupsController@index'),就像您在routes/web.php中所说的那样

像这样

Route::group('prefix‘=> 'admin',function () {旅行者::routes();

代码语言:javascript
复制
Route::get('groups', 'GroupsController@index');

});

并将这些行添加到index方法中。

公共函数索引(请求$request){

代码语言:javascript
复制
    // 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';

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41147381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档