【问题标题】:localization and route:resource does not work本地化和路线:资源不起作用
【发布时间】:2015-11-11 20:26:41
【问题描述】:

我通过 composer 安装了mcamara/laravel-localization。这工作正常。我主要通过http://url-to-laravel/en 使用它,在域根上添加语言区域en

此外,我有一个使用 mitulgolakiya/laravel-api-generator 的脚手架,也通过 composer 安装。

这也很好用。我为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 工作正常。

我想我必须调整如何在刀片中调用路由或如何配置路由本身,但我不知道如何?

如何让脚手架路线与本地化一起工作?

app/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

【问题讨论】:

    标签: php localization routes laravel-5


    【解决方案1】:

    我通过在app/Http/routes.php 中手动说明Route:resource() 生成的路由解决了这个问题。现在我可以通过http://url-to-laravel/ordershttp://url-to-laravel/en/orders 访问我的脚手架。

    php 工匠路线:列表

    +----------+----------------------+----------------+----------------------------------------------+
    | 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    |
    +----------+----------------------+----------------+----------------------------------------------+
    

    这是我用来手动创建路线的:

    app/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',
      ]);
    });
    

    此外,我必须修改由mitulgolakiya/laravel-api-generator 生成的edit.blade.php 文件。

    'method' =&gt; 'patch' 必须更改为 'method' =&gt; 'put'。与patch 一样,MethodNotAllowedHttpException 将被提升。

    资源/视图/订单/edit.blade.php

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

    【讨论】:

      【解决方案2】:

      在代码中添加 10 行不是解决方案。 这是这样的: https://github.com/laravel/framework/issues/1616

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-09-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-07
        • 1970-01-01
        • 1970-01-01
        • 2012-05-29
        相关资源
        最近更新 更多