Mark
Mark

Reputation: 3207

Can't pass a parameter through a named route

I cant figure out what I am missing. I am trying to have a form submit to a controller method through a named route with all of its input and image->id as a parameter. I keep getting a notfoundhttpexception. If I remove /{$id} from the route declaration I get a missing parameter for controller action error. Here is the code:

The route

 Route::post('images/toalbum/{$id}', array('as' => 'imgToAlbum', 'uses' => 'ImagesController@addImageToAlbums'));

routes.php

<?php

/*
|--------------------------------------------------------------------------
| Application Routes
|--------------------------------------------------------------------------
|
| Here is where you can register all of the routes for an application.
| It's a breeze. Simply tell Laravel the URIs it should respond to
| and give it the Closure to execute when that URI is requested.
|
*/


Route::get('/', array('as' => 'home', function()
{
    return View::make('layouts.default');
}));

Route::get('users/login', 'UsersController@getLogin');
Route::get('users/logout', 'UsersController@getLogout');

Route::post('users/login', 'UsersController@postLogin');

Route::resource('users', 'UsersController');

Route::resource('images', 'ImagesController');
//routes related to images
    Route::post('images/toalbum/{$id}', array('as' => 'imgToAlbum', 'uses' => 'ImagesController@addImageToAlbums'));

Route::resource('videos', 'VideosController');

Route::resource('albums', 'AlbumsController');

view that's submitting the form:

@extends('layouts.default')

    @section('content')
    <?php
    $albumarray = array(null => '');
    ?>

    {{ HTML::image($image['s3Url'], $image['altText']) }}
    <p>
        Title:{{ $image['caption'] }}</br>
        Alt-Text: {{ $image['altText'] }}</br>
        Description: {{ $image['description'] }}</br>
    </p>

    {{ Form::open(array('route' => array('imgToAlbum', $image['id']), 'method' => 'post')); }}


    @foreach ($albums as $album)
        <?php
        array_push ($albumarray, array($album['id'] => $album['caption']));
        ?>
    @endforeach


    {{ Form::label('Add image to album?') }}
    {{ Form::select('album', $albumarray) }}</br>



    {{ Form::submit('Add to Album')}}

    {{Form::close();}}

    <?php
        echo $albums;
    ?>

    @stop

    @section('footer')

    @stop

controller:

<?php

class ImagesController extends BaseController
{
    protected $image;

    public function __construct(Image $image)
    {
        $this->image = $image;
    }


    // add image to album

    public function addImageToAlbums($id)
    {
        dd($album = Input::all());

        $image = $this->where('id', '=', $id);

        $image->albumId = $album;

        $this->image->save();

        /*return Redirect::route('image.show', $this->image->id)
            ->with('message', 'Your image was added to the album');*/
    }
}

Upvotes: 0

Views: 97

Answers (1)

Mark
Mark

Reputation: 3207

Maybe this will help someone in the future so instead of deleting here is the answer. removing the $ from images/toalbum/{$id} in the route declaration has resolved the problem.

Upvotes: 1

Related Questions