Метод контроллера Laravel с моделью в качестве параметра

Я создал модель, используя php artisan make:model Transaction -a, поэтому она также сгенерировала для модели контроллер миграции, фабрики и ресурсов. Все работает как положено, но я понял это в коде контроллера:

/**
 * Display the specified resource.
 *
 * @param  \App\Transaction  $transaction
 * @return \Illuminate\Http\Response
 */
public function show(Transaction $transaction)
{
    //
}

/**
 * Show the form for editing the specified resource.
 *
 * @param  \App\Transaction  $transaction
 * @return \Illuminate\Http\Response
 */
public function edit(Transaction $transaction)
{
    //
}

Похоже, он ожидает экземпляр модели в методах show() и edit(), что кажется помощником для возврата представления, но как я могу интегрировать это в веб-маршрутизацию?


Английский не мой родной язык.

просто передайте я бы объекта в ваших URL-адресах, тогда laravel сделает за вас магию, и у вас будет объект в ваших методах

Ahmed Nour Jamal El-Din 19.12.2018 05:19

@ AhmedNourJamalEl-Din спасибо! в более старых версиях я должен был получить экземпляр модели с помощью Eloquent, это изменение меня смутило.

Vitor Mattos 20.12.2018 02:18
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
0
2
6 684
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Запустите php artisan route:list на консоли. Вы получите все маршруты вашего приложения. Это список маршрутов Route::resource('admin/blog-category', 'BlogCategoryController');. По списку маршрутов вы получите представление об URI и действии.

|        | POST      | api/admin/blog-category                      | blog-category.store   | App\Http\Controllers\BlogCategoryController@store                      | api          |
|        | GET|HEAD  | api/admin/blog-category                      | blog-category.index   | App\Http\Controllers\BlogCategoryController@index                      | api          |
|        | GET|HEAD  | api/admin/blog-category/create               | blog-category.create  | App\Http\Controllers\BlogCategoryController@create                     | api          |
|        | GET|HEAD  | api/admin/blog-category/{blog_category}      | blog-category.show    | App\Http\Controllers\BlogCategoryController@show                       | api          |
|        | PUT|PATCH | api/admin/blog-category/{blog_category}      | blog-category.update  | App\Http\Controllers\BlogCategoryController@update                     | api          |
|        | DELETE    | api/admin/blog-category/{blog_category}      | blog-category.destroy | App\Http\Controllers\BlogCategoryController@destroy                    | api          |
|        | GET|HEAD  | api/admin/blog-category/{blog_category}/edit | blog-category.edit    | App\Http\Controllers\BlogCategoryController@edit                       | api          |

проверьте BlogCategoryController@show Uri, вы получите api/admin/blog-category/{blog_category}. то есть вы должны передать один параметр. В качестве параметра вы должны передать идентификатор категории блога.

Пример: если URL-адрес api/admin/blog-category/10

public function show(Blog $BlogCategory)
    {
        $blogCategory = $BlogCategory;
    }

В $blogCategory вы получите результат категории блога с идентификатором 10.

почему-то не работает. Я написал метод show() следующим образом: return view('administração.transações.show')->with('transação', $transaction);, а маршрут - URI: administração/transações/{transaçõe}; Name: transações.show; Action: App\Http\Controllers\TransactionController@show, но когда я пытаюсь получить его с помощью administração / transações / {id}, он возвращает ошибку 404.

Vitor Mattos 20.12.2018 02:50

Ошибка 404, о которой я упоминал, вероятно, является ошибкой маршрутов с utf-8. Когда я перехожу на trasacoes (от «transações»), это работает. Я запрошу проблему.

Ответ принят как подходящий

если ваш маршрут - administração/transações/{transaçõe}, а ваша модель - Сделка, тогда laravel не знает, что с ним делать!

Итак, чтобы заставить его работать, есть два способа:

  • вы должны привязать его явным образом в соответствии с этим ссылка на сайт:

    добавьте Route::model('transaçõe', App\Transaction::class); в метод boot() вашего RouteServiceProvider следующим образом:

    public function boot()
    {
        parent::boot();
    
        Route::model('transaçõe', App\Transaction::class);
    }
    
  • ИЛИ вы меняете маршрут на administração/transações/{transaction}.

Другие вопросы по теме