добавить параметр URI к имени маршрута в laravel - PullRequest
1 голос
/ 05 октября 2019

Я работаю над проектом Laravel, и я создал простую систему CRUD, но у меня есть небольшая проблема

, чтобы сгенерировать систему URL в моем проекте, я создал Route::macro и добавил егодо AppServiceProvider:

Route::macro('crud', function () {
        Route::group([

         ], function () {

            //    Route::resource('', 'CrudController');
            Route::get('{model}', 'CrudController@index');
            Route::get('{model}/create', 'CrudController@create');

            Route::post('{model}', 'CrudController@store');             /** << post **/

            Route::get('{model}/{id}', 'CrudController@show');
            Route::get('{model}/{id}/edit', 'CrudController@edit');

            Route::match(['PUT', 'PATCH'],'{model}/{id}', 'CrudController@update'); /** << post **/
            Route::delete('{model}/{id}', 'CrudController@destroy'); /** << post **/
        });
    });

это пока прекрасно работает, но проблема в том, что мне нужно использовать ->name() с ним и добавить к нему параметр $model!

пример того, что я пытаюсь сделать:

Route::get('{model}', 'CrudController@index')->name('{model}.index');

это возможно ?, Заранее спасибо

Ответы [ 2 ]

1 голос
/ 05 октября 2019

Здесь в этом примере вы можете зациклить некоторые числа и динамически создать несколько маршрутов:

 for ($i = 0; $i < 5; $i++) {
     Route::get('test/' . $i, 'Controller@test_' . $i)->name('test.' . $i);
 }

Вы можете проверить все добавленные маршруты с помощью "php artisan route: list". Я не рекомендую вам делать это, но для вашего случая вы можете где-то в файле rout.php определить массив следующим образом и повторить цикл:

 $models = ['user', 'owner', 'admin'];
 foreach ($models as $model) {
     Route::get($model, 'CrudController@index')->name($model . '.index');
 }

Или вы можете определить этот массив в конфигах (например, в "config / app.php"), например:

 'models' => ['user', 'owner', 'admin'];

. А в rout.php вы можете просто получить это с помощью этого (не забудьте запустить "php artisan config: cache" после измененияapp.php):

 $models = config('app.models');
 // foreach loop
0 голосов
/ 05 октября 2019

Вы можете добавить префикс имени к группе маршрутов для модели
Из документов

<?php

namespace App\Providers;

use Illuminate\Support\Facades\Route;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    public function boot()
    {
        Route::macro('crud', function () {
            Route::name('{model}.')->group(function () {
                Route::get('{model}', 'CrudController@index')->name('index');
                Route::get('{model}/create', 'CrudController@create')->name('create');
                Route::post('{model}', 'CrudController@store')->name('store');
                Route::get('{model}/{id}', 'CrudController@show')->name('show');
                Route::get('{model}/{id}/edit', 'CrudController@edit')->name('edit');
                Route::match(['PUT', 'PATCH'], '{model}/{id}', 'CrudController@update')->name('update');
                Route::delete('{model}/{id}', 'CrudController@destroy')->name('destroy');
            });
        });
    }
}

Result

+-----------+----------------------------+-----------------+------------------------------------------------------------+
| Method    | URI                        | Name            | Action                                                     |
+-----------+----------------------------+-----------------+------------------------------------------------------------+
| GET|HEAD  | {model}                    | {model}.index   | App\Http\Controllers\CrudController@index                  |
| POST      | {model}                    | {model}.store   | App\Http\Controllers\CrudController@store                  |
| GET|HEAD  | {model}/create             | {model}.create  | App\Http\Controllers\CrudController@create                 |
| GET|HEAD  | {model}/{id}               | {model}.show    | App\Http\Controllers\CrudController@show                   |
| PUT|PATCH | {model}/{id}               | {model}.update  | App\Http\Controllers\CrudController@update                 |
| DELETE    | {model}/{id}               | {model}.destroy | App\Http\Controllers\CrudController@destroy                |
| GET|HEAD  | {model}/{id}/edit          | {model}.edit    | App\Http\Controllers\CrudController@edit                   |
+-----------+----------------------------+-----------------+------------------------------------------------------------+

Сейчасвы можете получить доступ к example.com/user/create и example.com/product/create, и они оба используют один и тот же метод контроллера

Надеюсь, это поможет

...