У меня есть 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
работает нормально.
Я думаю, что мне нужно настроить, как маршруты вызывается в лезвии или как настроены маршруты, но я не знаю, как это сделать?
Как я могу получить леса, работающие с локализацией?
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',
]);
});
@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
Чтобы добавить 10 строк к вашему коду, это не решение. Это способ: https://github.com/laravel/framework/issues/1616
Я решил это, указав маршруты, созданные Route:resource()
вручную в app/Http/routes.php
. Теперь я могу получить доступ к моему эшафоту с помощью: http://url-to-laravel/orders
и http://url-to-laravel/en/orders
.
+----------+----------------------+----------------+----------------------------------------------+
| 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 |
+----------+----------------------+----------------+----------------------------------------------+
Это я использовал для создания маршрутов вручную:
// ...
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
.
{!! Form::model($order, ['route' => ['orders.update', $order->id], 'method' => 'put']) !!}