2013-06-08 3 views
0

У меня возникли трудности с поиском описанных здесь остановленных маршрутов (Laravel Documentation: Restful Controllers).Laravel Restful Resource Controller routing getShow()

Я могу получить форму создания и индекс (вид для всех) для правильной работы, но я не могу получить ссылку на один элемент для правильной работы. GetShow

я определил свой путь, как успокоительное, так что следует использовать автоматическую маршрутизацию в моем routes.php:

// People 
Route::controller('people', 'PeopleController'); 

Вот мой контроллер PeopleController.php:

<?php 
class PeopleController extends BaseController { 

    public $restful = true; 

    public function getIndex() 
    { 


     return View::make('people.index') 
      ->with('people', $people);   
    } 

    public function getShow($id) 
    { 
    return 'success! it finally worked!'; 
    } 


    public function getCreate() 
    { 
     return View::make('people.create'); 
    } 

    public function postStore() 
    { 

      return Redirect::to('people') 
       ->with('success', 'Person added successfully'); 
    } 

} 

Вот мой шаблон index.blade.php, который должен ссылаться на шаблон show.blade.php:

<ul class="thumbnails"> 
    @foreach ($people as $people) 
    <li> <a href="{{ URL::to('people/' . $people->people_id) }}" class="thumbnail"> <img src="https://fbcdn-sphotos-h-a.akamaihd.net/hphotos-ak-ash4/s200x200/486010_633561579994787_1827482783_n.jpg" /> </a> 
     <div class="caption"> 

      <p> {{ $people->people_id }}<br /> 
      {{ $people->firstname }}<br /> 
       {{ $people->lastname }}<br /> 
       {{ $people->line1 }}<br /> 
       {{ $people->city }}<br /> 
       <br /> 
       {{ $people->state }} {{ $people->zip }}<br /> 
       {{ $people->country }} </p> 
      <p> 
       <button class="btn btn-small btn-primary" type="button">Actions</button> 
       <button class="btn btn-small" type="button">View</button> 
      </p> 
     </div> 
    </li> 
    @endforeach 
</ul> 

У меня есть представление, созданное под названием show.blade.php.

@extends('master') 

@section('title') 
@parent 
:: Home 
@stop 

@section('content') 
<p>it finally worked!</p> 

@stop 

Но всякий раз, когда я перехожу к элементу, например, людям/1, я получаю дерьмо тонов ошибок :.

Symfony\Component\HttpKernel\Exception\NotFoundHttpException 
…\vendor\laravel\framework\src\Illuminate\Routing\Controllers\Controller.php290 
Illuminate\Routing\Controllers\Controller missingMethod 
<#unknown>0 
call_user_func_array 
…\vendor\laravel\framework\src\Illuminate\Routing\Controllers\Controller.php138 
Illuminate\Routing\Controllers\Controller callMethod 
…\vendor\laravel\framework\src\Illuminate\Routing\Controllers\Controller.php115 
Illuminate\Routing\Controllers\Controller callAction 
…\bootstrap\compiled.php9980 
Illuminate\Routing\{closure} 
<#unknown>0 
call_user_func_array 
…\bootstrap\compiled.php16626 
Illuminate\Routing\Route callCallable 
…\bootstrap\compiled.php16605 
Illuminate\Routing\Route run 
…\bootstrap\compiled.php10000 
Illuminate\Routing\Router dispatch 
…\bootstrap\compiled.php1010 
Illuminate\Foundation\Application dispatch 
…\bootstrap\compiled.php993 
Illuminate\Foundation\Application run 
…\public\index.php49 

На данный момент я раздели свой код на голые кости, чтобы заставить его работать. Я считаю, что, возможно, функции RESTful не так полезны, поскольку документации так не хватает. Есть ли в любом случае доступ к документации OLD версии 3?

Если кто-то может видеть, что я делаю неправильно, я был бы очень признателен. Кажется, что это правильно, как в документах, но не совсем подробно, как это работает. :(Как новичок в Laravel Я не уверен, что я просто что-то пропустил, или если документы действительно не уточняют, что нужно сделать.

Было бы лучше просто создать собственные маршруты пытаться использовать встроенные функции? Спасибо за вашу помощь.

+0

Попробовать людей/показать/1, потому что в определении метода getIndex нет аргумента –

ответ

2

Вы должны изменить свои ссылки на ....

<a href="{{ URL::to('people/show/' . $people->people_id) }}"> 

так, чтобы вызвать метод getShow(), который будет принимать ваш аргумент $ id.

То, как у вас есть это сейчас, его движение к людям/1, которые я s просто воспитывает getIndex(), который не принимает никаких аргументов, следовательно, ваша ошибка.

Если вы хотите, чтобы люди/1, чтобы сделать что-то, то вы бы изменить GetIndex() функцию, чтобы что-то вроде этого .....

function getIndex($id=null){ 
    if($id==null){ 
     $people = People::all();   
    } else { 
     $people = People::find($id); 
    } 
    return View::make('people.index') 
    ->with('people', $people); 
    } 

Но я сомневаюсь, вот что вы хотите

Я уверен, что только изменение ссылки, как я упоминал выше, исправит вашу проблему :)

+0

Aha Это работает! Спасибо! :) Это тоже имеет смысл! – user2444007

+0

Я бы использовал '{{url ('people/show', $ people-> people_id)}}', вы можете передать параметры функции без конкатенации строк. – Cranio

0

Я бы использовал маршрутизацию ресурсов: http://laravel.com/docs/controllers#resource-controllers Контроллеры RESTful и понятны. Единственное место, где я использую маршрутизацию контроллера, - это контроллеры, которые обрабатывают произвольные элементы, такие как PagesController. Таким образом, у вас есть последовательный способ доступа к вашим страницам.

Смежные вопросы