локализация и маршрут: ресурс не работает

1

У меня есть mcamara/laravel-локализация через установленный композитор. Это прекрасно работает. Я в основном использую его через http://url-to-laravel/en, добавленный языковой язык en в корне домена.

Кроме того, у меня есть леса, работающие с mitulgolakiya/laravel-api-generator, также установленные через композитора.

Это хорошо работает. Я создал эшафот для Order. Когда я теперь совмещаю эшафот с локализацией, я сталкиваюсь с проблемами.

Вызов http://url-to-laravel/en/orders приводит к:

 ErrorException in UrlGenerator.php line 296: Route [orders.create] not defined. 
(View: /var/www/apps/foobar/l5/resources/views/orders/index.blade.php)

Вызов http://url-to-laravel/orders работает нормально.

Я думаю, что мне нужно настроить, как маршруты вызывается в лезвии или как настроены маршруты, но я не знаю, как это сделать?

Как я могу получить леса, работающие с локализацией?

приложение /Http/routes.php

Route::group(['prefix' => LaravelLocalization::setLocale()], function() {

  Route::get('/', function () {
    return view('start');
  });

});

Route::group(['prefix' => LaravelLocalization::setLocale()], function() {
  Route::resource('orders', 'OrderController');

  Route::get('orders/{id}/delete', [
    'as' => 'orders.delete',
    'uses' => 'OrderController@destroy',
  ]);
});

ресурсы/виды/заказы/index.blade.php

@extends('layout')
@section('content')
<div class="container">
    @include('flash::message')

    <div class="row">
        <h1 class="pull-left">Orders</h1>
        <a class="btn btn-primary pull-right" style="margin-top: 25px"
        href="{!! route('orders.create') !!}">Add New</a> <!-- ERROR LINE -->
    </div>

    <div class="row"> 
        @if($orders->isEmpty())
            <div class="well text-center">No Orders found.</div>
        @else
            @include('orders.table')
        @endif
    </div>
    @include('common.paginate', ['records' => $orders])
</div>
@endsection
Теги:
routes
laravel-5
localization

2 ответа

0

Чтобы добавить 10 строк к вашему коду, это не решение. Это способ: https://github.com/laravel/framework/issues/1616

0

Я решил это, указав маршруты, созданные Route:resource() вручную в app/Http/routes.php. Теперь я могу получить доступ к моему эшафоту с помощью: http://url-to-laravel/orders и http://url-to-laravel/en/orders.

php artisan route: список

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

Это я использовал для создания маршрутов вручную:

приложение /Http/routes.php

// ...
Route::group(['prefix' => LaravelLocalization::setLocale()], function() {

  Route::get( 'orders', ['as' => 'orders.index', 'uses' => 'OrderController@index'] );
  Route::get( 'orders/create', ['as' => 'orders.create', 'uses' => 'OrderController@create'] );
  Route::post( 'orders', ['as' => 'orders.store', 'uses' => 'OrderController@store'] );
  Route::get( 'orders/{orders}', ['as' => 'orders.show', 'uses' => 'OrderController@show'] );
  Route::get( 'orders/{orders}/edit', ['as' => 'orders.edit', 'uses' => 'OrderController@edit'] );
  Route::put( 'orders/{orders}', ['as' => 'orders.update', 'uses' => 'OrderController@update'] );

  //Route::resource('orders', 'OrderController'); # does not work with prefix for Laravellocalization

  Route::get('orders/{id}/delete', [
    'as' => 'orders.delete',
    'uses' => 'OrderController@destroy',
  ]);
});

Кроме того, мне пришлось адаптировать файл edit.blade.php сгенерированный с помощью mitulgolakiya/laravel-api-generator.

'method' => 'patch' должен был быть изменен на 'method' => 'put'. Поскольку с patch будет создано MethodNotAllowedHttpException.

ресурсы/виды/заказы/edit.blade.php

{!! Form::model($order, ['route' => ['orders.update', $order->id], 'method' => 'put']) !!}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню