Laravel Backpack 404 (нет результатов запроса для модели) для CRUD, вложенных в группы маршрутов

Как вы можете видеть в вставленном ниже коде, я использую CRUD :: resources внутри Route :: groups для вложения моих сырых материалов. Это отлично работает на первом уровне. Но у меня проблемы со 2-м и 3-м уровнями.

Мой грубый индекс работает отлично. Так и создайте. Но при редактировании / обновлении и удалении у обоих есть проблемы. Я обнаружил ошибку 404 «Нет результатов запроса для модели [App \ Models \ TeamUserRole] 1».

Вот мой код маршрута:

Route::group([
'prefix'     => config('backpack.base.route_prefix', 'admin'),
'middleware' => ['web', config('backpack.base.middleware_key', 'admin')],
'namespace'  => 'App\Http\Controllers\Admin'], function () {

CRUD::resource('user', 'UserCrudController');

CRUD::resource('tasks', 'TaskCrudController');

CRUD::resource('teams', 'TeamCrudController');
Route::group(['prefix' => 'teams/{team_id}'], function()
{
    CRUD::resource('tasks', 'TeamTaskCrudController');
    CRUD::resource('users', 'TeamUserCrudController');
    CRUD::resource('teams', 'TeamConnectionCrudController');

    Route::group(['prefix' => 'setup/'], function()
    {
        CRUD::resource('skills', 'TeamSkillCrudController');
        CRUD::resource('services', 'TeamServiceCrudController');
        CRUD::resource('categories', 'TeamCategoryCrudController');

        CRUD::resource('user/roles', 'TeamUserRoleCrudController');
        CRUD::resource('user/permissions', 'TeamUserPermissionCrudController');

        CRUD::resource('team/types', 'TeamTypeCrudController');
        CRUD::resource('team/features', 'TeamFeatureCrudController');

        CRUD::resource('team/connection/types', 'TeamConnectionTypeCrudController');
        CRUD::resource('team/connection/permissions', 'TeamConnectionPermissionCrudController');
    });     
}); });

Вот мой код контроллера crud:

namespace App\Http\Controllers\Admin;

use App\Models\Team;

use Backpack\CRUD\app\Http\Controllers\CrudController;

// VALIDATION: change the requests to match your own file names if you 
need form validation
use App\Http\Requests\TeamUserRoleRequest as StoreRequest;
use App\Http\Requests\TeamUserRoleRequest as UpdateRequest;

class TeamUserRoleCrudController extends CrudController
{
public function setup()
{

    /*
    |--------------------------------------------------------------------------
    | BASIC CRUD INFORMATION
    |--------------------------------------------------------------------------
    */
    $this->crud->team_name = null;
    $this->crud->team_id = \Route::current()->parameter('team_id');
    if (isset($this->crud->team_id)) {
        $this->crud->team_name = Team::find($this->crud->team_id)->name;  
    }

    $this->crud->setModel('App\Models\TeamUserRole');
    $this->crud->setRoute(config('backpack.base.route_prefix') . '/teams/'.$this->crud->team_id.'/setup/user/roles');
    $this->crud->setEntityNameStrings('Team User Role', 'Team User Roles');

    // set a different route for the admin panel buttons
    $this->crud->addClause('Where', 'team_id', $this->crud->team_id);

    /*
    |--------------------------------------------------------------------------
    | BASIC CRUD INFORMATION
    |--------------------------------------------------------------------------
    */

    // $this->crud->setFromDb();

    // ------ CRUD FIELDS
    $this->crud->addField([ // Text
        'name' => 'name',
        'label' => "Name",
        'type' => 'text',

        // optional
        //'prefix' => '',
        //'suffix' => '',
        //'default'    => 'some value', // default value
        //'hint'       => 'Some hint text', // helpful text, show up after input
        //'attributes' => [
           //'placeholder' => 'Some text when empty',
           //'class' => 'form-control some-class'
         //], // extra HTML attributes and values your input might need
         //'wrapperAttributes' => [
           //'class' => 'form-group col-md-12'
         //], // extra HTML attributes for the field wrapper - mostly for resizing fields 
         //'readonly'=>'readonly',
    ], 'update/create/both');

    $this->crud->addField([
        'label'     => 'Permissions',
        'type'      => 'checklist',
        'name'      => 'permissions',
        'entity'    => 'permissions',
        'attribute' => 'name',
        'model'     => 'App\Models\TeamUserPermission',
        'pivot'     => true,
    ]);

    // $this->crud->addField($options, 'update/create/both');
    // $this->crud->addFields($array_of_arrays, 'update/create/both');
    // $this->crud->removeField('name', 'update/create/both');
    // $this->crud->removeFields($array_of_names, 'update/create/both');

    // ------ CRUD COLUMNS
    $this->crud->addColumn([
       'name' => 'name', // The db column name
       'label' => "Role", // Table column heading
       // 'prefix' => "Name: ",
       // 'suffix' => "(user)",
       // 'limit' => 120, // character limit; default is 80;
    ]);

    $this->crud->addColumn([ // n-n relationship (with pivot table)
        'label'     => 'Permissions',
        'type'      => 'select_multiple',
        'name'      => 'permissions',
        'entity'    => 'permissions',
        'attribute' => 'name',
        'model'     => 'App\Models\TeamUserPermission',
        'pivot'     => true,
    ]);
}

public function store(StoreRequest $request)
{
    /* Set Team ID */
    $request->request->set('team_id',$this->crud->team_id);

    // your additional operations before save here
    $redirect_location = parent::storeCrud($request);
    // your additional operations after save here
    // use $this->data['entry'] or $this->crud->entry
    return $redirect_location;
}

public function update(UpdateRequest $request)
{
    // your additional operations before save here
    $redirect_location = parent::updateCrud($request);
    // your additional operations after save here
    // use $this->data['entry'] or $this->crud->entry
    return $redirect_location;
}
}

person Xpressify    schedule 06.04.2018    source источник


Ответы (1)


Хорошо ... Возможно, я решил это ...

Я добавил это в верхнюю часть моего crud, чтобы получить и сохранить идентификатор пользователя из параметра маршрута: $ this-> crud-> user_id = \ Route :: current () -> parameter ('user');

Затем я скопировал функцию редактирования ($ id) из класса CrudController и перезаписал переменную $ id моим $ this-> crud-> user_id.

Кажется, это сработало. Но интересно, нужно ли пересмотреть CrudController, чтобы иметь возможность работать с вложенными параметрами.

person Xpressify    schedule 10.04.2018