View records on a view page by clicking the links - eloquent

How do I view each individual record? Each record is a link, if clicked, it should display the record on the view page.
Route::get('question/{$id}', array('as'=>'question', 'uses'=>'QuestionController#show'));
THis is hte show method to display:
public function show($id = null)
{
return view('questions.view')
->with('title', 'Make it Snappy - Question')
->with('question', Question::find($id))
->with('users', Auth::user()->username);
}
This is the index.blade.php page
#extends('layouts.default')
#section('content')
<h1>Ask a Question</h1>
#if(Auth::check())
#if($errors->has())
<p>The following errors have occured:</p>
<ul id="form-errors">
{!! $errors->first('ask
', '<li>:message</li>') !!}
</ul>
#endif
{!! Form::open(array('url' => 'ask', 'method' => 'post')) !!}
{!! Form::token() !!}
<p>
{!! Form::label('question', 'Question') !!}<br />
{!! Form::text('question', Input::old('question')) !!} <br />
{!! Form::submit('Ask a Question') !!}
</p>
{!! Form::close() !!}
#else
<p>Please login to ask a question.</p>
#endif
<div id="questions">
<h2>Unsolved Questions</h2>
#if(!count($questions) > 0)
<p>No questions have been asked</p>
#else
<ul>
#foreach($questions as $question)
<li>{!! Html::linkRoute('question', str_limit($question->questions, 35), $question->id) !!} by
#if(count($users) > 0)
#foreach($users as $user)
#if($user->id === $question->userid)
{!! ucfirst($user->username) !!}
#endif
#endforeach
#endif
</li>
#endforeach
</ul>
{!! $questions->render() !!}
#endif
</div>
#stop
All i want is that when I click on any of the questions it should be displayed on the view page. I appreciate your support.

Route::get('question/{$id}', array('as'=>'question', 'uses'=>'QuestionController#show'));
your route accepts get while ur form method was post so it couldnt find get request so try making it get
{!! Form::open(array('url' => 'question', 'method' => 'post')) !!}
try it
{!! Form::open(array('url' => 'question', 'method' => 'get')) !!}

Related

Laravel 5.5 add form id

I have the following:
{!! Form::model($houses, ['method' => 'PATCH','route' => ['houses.update', $houses->id]]) !!}
and {!! Form::open(array('route' => 'houses.store','method'=>'POST')) !!}
witch result in:
<form method="POST" action="http://localhost/j/public_html/houses/2" accept-charset="UTF-8">
and <form method="POST" action="http://localhost/j/public_html/houses" accept-charset="UTF-8">
How do I add an <form id="houseform" ... in both of them??
Thanks
You can use:
{!! Form::model($houses, [
'method' => 'PATCH',
'route' => ['houses.update', $houses->id],
'id' => 'houseform'
]) !!}
Similar for 2nd:
{!! Form::open(array('route' => 'houses.store','method'=>'POST', 'id' => 'houseform')) !!}

Linking edit button from table to Laravel Edit form

I have a table that displays the data from my database. at the end of each row I have an Edit/Update Button. I would like it when clicking on the edit button it reference the the Edit Form.
My edit form works. I can access the data when visiting computers/{id}/edit, The form displays the current data and I can edit the data and submit the updates and it updates in the database (mysql).
This is my index.blade.php, which displays the table with the update button
#extends('layout')
#section('content')
<h1>Inventory</h1>
<table class="table table-striped">
<thead>
<tr>
<th>Last Name</th>
<th>First Name</th>
<th>Department</th>
<th>Building</th>
<th>Room</th>
<th>Manufacturer</th>
<th>Device</th>
<th>Model</th>
<th>Service Tag</th>
<th>Mac Address</th>
<th>Status</th>
<th>Comments</th>
</tr>
</thead>
<tbody>
#foreach($inventories as $inventory)
<tr>
<td>{{$inventory->lastName}}</td>
<td>{{$inventory->firstName}}</td>
<td>{{$inventory->department}}</td>
<td>{{$inventory->building}}</td>
<td>{{$inventory->room}}</td>
<td>{{$inventory->manufacturer}}</td>
<td>{{$inventory->device}}</td>
<td>{{$inventory->model}}</td>
<td>{{$inventory->tag}}</td>
<td>{{$inventory->macAddress}}</td>
<td>{{$inventory->status}}</td>
<td>{{$inventory->comments}}</td>
<td>
{{--Need the button to open up my edit form--}}
<button formaction="computers/{id}/edit">{{ trans('computers.edit') }}</button>
{{--<input type="submit" name="update" id="update" value="Update" class="btn btn-primary">--}}
</td>
</tr>
#endforeach
</tbody>
</table>
#stop
This is my form.blade.php - which is a partial that I include in my create.blade.php and edit.blade.php and both of these pages work.
<div class="row">
<div class="col-md-6">
<div class="form-group">
{!! Form::label('lastName', 'Last Name:') !!}
{!! Form::text('lastName', null, ['class' => 'form-control' ]) !!}
</div>
<div class="form-group">
{!! Form::label('firstName', 'First Name:') !!}
{!! Form::text('firstName', null, ['class' => 'form-control']) !!}
</div>
<div class="form-group">
{!! Form::label('departmen', 'Department:') !!}
{!! Form::text('department', null, ['class' => 'form-control']) !!}
</div>
<div class="form-group" >
{!! Form::label('building', 'Building:') !!}
{!! Form::select('building', ['vanHall' => 'Vanderbilt Hal',
'wilf' => 'Wilf Hall',
'dag' => 'D Agostino Hall',
'furmanHall' => 'Furman Hall',
'wsn' => 'WSN',
'mercer' => 'Mercer',
'training' => 'Traing Room',
'storage' => 'Storage'
</div>
<div class="form-group">
{!! Form::label('room', 'Room:') !!}
{!! Form::text('room', null, ['class' => 'form-control']) !!}
</div>
<div class="form-group">
{!! Form::label('manufacturer', 'Manufacturer:') !!}
{!! Form::text('manufacturer', null, ['class' => 'form-control']) !!}
</div>
</div>
<div class="col-md-6">
<div class="form-group">
{!! Form::label('device', 'Device:') !!}
{!! Form::select('device', ['desktop' => 'Desktop',
'laptop' => 'Laptop',
'classroom' => 'Classroom',
'printer' => 'Printer',
'mifi' => 'MiFi',
'panopto' => 'Panopto',
'Other' => 'Other',
], null, ['placeholder' => 'Select Device'])!!}
</div>
<div class="form-group">
{!! Form::label('model', 'Model:') !!}
{!! Form::text('model', null, ['class' => 'form-control']) !!}
</div>
<div class="form-group">
{!! Form::label('tag', 'Service Tag:') !!}
{!! Form::text('tag', null, ['class' => 'form-control']) !!}
</div>
<div class="form-group">
{!! Form::label('macAddress', 'Mac Address:') !!}
{!! Form::text('macAddress', null, ['class' => 'form-control']) !!}
</div>
<div class="form-group">
{!! Form::label('status', 'Status:') !!}
{!! Form::select('status', ['active' => 'Active',
'inactive' => 'Inactive',
], null, ['placeholder' => 'Status'])!!}
</div>
<div class="form-group">
{!! Form::label('comments', 'Comments:') !!}
{!! Form::text('comments', null, ['class' => 'form-control']) !!}
</div>
</div>
<div class="col-md-12">
<hr>
<div class="form-group">
{!! Form::submit($submitButtonText, ['class' => 'btn btn-primary form-control']) !!}
{{--<button type="submit" class="btn btn-primary">Submit</button>--}}
</div>
</div>
Instead of using a button I would use an <a> tag.
<a href="{{ url('computers/'.$inventory->id.'/edit') }}>{{ trans('computers.edit') }}</a>
the url() function is a Laravel helper function
Also.. I'm sure there are enough examples of things like this, so make sure you google your question first.
Try this:
<button href="computers/{id}/edit">{{ trans('computers.edit') }}</button>
Or you could use form (Laravel Collective way):
{!! Form::open(['method' => 'Get', 'route' => ['computers.edit', $inventory->id]]) !!}
{!! Form::submit(trans('computers.edit')) !!}
{!! Form::close() !!}
sorry for the late reply
if you are creating the bigger project and if you hate being write the code in every
index.balde.php file for generarting the Edit,Show,Delete Buttons
just use my helper function
For Eg:
Laravel 5.7
Open Your Model it may be Computer or SomeModel
Just Paste the following Code into it
public static function tableActionButtons($fullUrl,$id,$titleValue,$buttonActions = ['show', 'edit', 'delete'],$buttonOptions='')
{
//Value of the post Method
$postMethod = 'POST';
//if the application is laravel then csrf is used
if (function_exists('csrf_token'))
{
$token = csrf_token();
}elseif (!function_exists('csrf_token'))
//else if the mcrypt id is used if the function exits
{
if (function_exists('mcrypt_create_iv'))
{
// if the mcrypt_create_iv id is used if the function exits the set the token
$token = bin2hex(mcrypt_create_iv(32, MCRYPT_DEV_URANDOM));
}
else{
// elseopenssl_random_pseudo_bytes is used if the function exits the set the token
$token = bin2hex(openssl_random_pseudo_bytes(32));
}
}
//action button Value
//(url()->full()) will pass the current browser url to the function[only aplicable in laravel]
$urlWithId =$fullUrl.'/'.$id;
//Charset UsedByFrom
$charset = 'UTF-8';
// Start Delete Button Arguments
//title for delete functions
$deleteFunctionTitle = 'Delete';
//class name for the deletebutton
$deleteButtonClass = 'btn-delete btn btn-xs btn-danger';
//Icon for the delete Button
$deleteButtonIcon = 'fa fa-trash';
//text for the delete button
$deleteButtonText = 'Delete Button';
//dialog Which needs to be displayes while deleting the record
$deleteConfirmationDialog = 'Are You Sure t';
$deleteButtonTooltopPostion = 'top';
// End Delete Button Arguments
// Start Edit Button Arguments
//title for Edit functions
$editFunctionTitle = 'Edit';
$editButtonClass = 'btn-delete btn btn-xs btn-primary';
//Icon for the Edit Button
$editButtonIcon = 'fa fa-pencil';
//text for the Edit button
$editButtonText = 'Edit Button';
$editButtonTooltopPostion = 'top';
// End Edit Button Arguments
// Start Show Button Arguments
//title for Edit functions
$showFunctionTitle = 'Show';
$showButtonClass = 'btn-delete btn btn-xs btn-primary';
//Icon for the Show Button
$showButtonIcon = 'fa fa-eye';
//text for the Show button
$showButtonText = 'Show Button';
$showButtonTooltopPostion = 'top';
// End Show Button Arguments
//Start Arguments for DropDown Buttons
$dropDownButtonName = 'Actions';
//End Arguments for DropDown Buttons
$showButton = '';
$showButton .='
<a href="'.$fullUrl.'/'.$id.'"class="'.$showButtonClass.'"data-toggle="tooltip"data-placement="'.$showButtonTooltopPostion.'"title="'.$showFunctionTitle.'-'.$titleValue.'">
<i class="'.$showButtonIcon.'"></i> '.$showButtonText.'
</a>
';
$editButton ='';
$editButton .='
<a href="'.$urlWithId.'/edit'.'"class="'.$editButtonClass.'"data-toggle="tooltip"data-placement="'.$editButtonTooltopPostion.'" title="'.$editFunctionTitle.'-'.$titleValue.'">
<i class="'.$editButtonIcon.'"></i> '.$editButtonText.'
</a>
';
$deleteButton='';
$deleteButton .='
<form id="form-delete-row' . $id . '" method="'.$postMethod.'" action="'.$urlWithId.'" accept-charset="'.$charset.'"style="display: inline" onSubmit="return confirm("'.$deleteConfirmationDialog.'")">
<input name="_method" type="hidden" value="DELETE">
<input name="_token" type="hidden" value="'.$token.'">
<input name="_id" type="hidden" value="'.$id.'">
<button type="submit"class="'.$deleteButtonClass.'"data-toggle="tooltip"data-placement="'.$deleteButtonTooltopPostion.'" title="'.$deleteFunctionTitle.'-'.$titleValue.'">
<i class="'.$deleteButtonIcon.'"></i>'.$deleteButtonText.'
</button>
</form>
';
$actionButtons = '';
foreach ($buttonActions as $buttonAction)
{
if ($buttonAction == 'show')
{
$actionButtons .= $showButton;
}
if ($buttonAction == 'edit')
{
$actionButtons .= $editButton;
}
if ($buttonAction == 'delete')
{
$actionButtons .= $deleteButton;
}
}
if (empty($buttonOptions))
{
return $actionButtons;
}
elseif (!empty($buttonOptions))
{
if ($buttonOptions == 'group')
{
$buttonGroup = '<div class="btn-group" role="group" aria-label="">
'.$actionButtons.'
</div>';
return $buttonGroup;
}elseif($buttonOptions == 'dropdown')
{
$dropDownButton =
'<div class="dropdown">
<button class="btn btn-secondary dropdown-toggle" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
'.$dropDownButtonName.'
</button>
<div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
'.$actionButtons.'
</div>
</div>
';
return $dropDownButton;
}else
{
return 'only <code>group</code> and <code>dropdown</code> is Available ';
}
}
}
Now all are set then open your index.blade.php
and replace your code
<td>
{{--Need the button to open up my edit form--}}
<button formaction="computers/{id}/edit">{{ trans('computers.edit') }}</button>
<input type="submit" name="update" id="update" value="Update" class="btn btn-primary">
</td>
With This
{!! Computer::tableActionButtons(url()->full(),$inventory->id,$inventory->firstName,['edit',delete,delete],'dropdown'); !!}
If you find any bugs or any issues in buttons please comment in below section to improve my helper script
VERY CAREFUL NOTE THIS IS FOR LARAVEL EXPERTS IF YOU ARE NOW BEGGINER DONT USE IT
just Watch the tutorial at
https://appdividend.com/2018/09/06/laravel-5-7-crud-example-tutorial/
https://laracasts.com/series/laravel-from-scratch-2018
Hope it saved time

Laravel Form update multiple records

I have a list of users, and for each user of the list there is a select box where the selected value role value is shown.
I was thinking a way on how allow to send all the modifications for each user with the submit button to a method of the controller which should update the role. I have no idea.
This is the form, which works correctly:
{!!Form::open(['url' => ['admin/users/edit'], 'class' => 'form-horizontal', 'method' => 'POST']) !!}
#foreach($users as $user)
<div class="form-group">
<div class="list-user-element">{!! $user->name !!}</div>
<div class="list-user-email">{!! $user->email !!}</div>
<div>
{!! Form::select('role', $roles, $user->role->label, ['class' => 'form-control']); !!}
</div>
</div>
#endforeach
<div class="form-group">
<div class="col-sm-offset-2 col-sm-5">
{!! Form::submit('Update', array('class' => 'btn btn-warning')) !!}
</div>
</div>
{!! Form::close() !!}
I don't know how to prepare the controller, neither which kind of info is passed to the controller.
Route::post('admin/users/edit', 'AdminController#showRegisteredUsersRoles');
And here it gives error:
public function editRegisteredUsersRoles(Request $request)
{
dd($request);
}
You could do the form like this
{!! Form::select('users[' . $user->id . '].role', $roles, $user->role->label, ['class' => 'form-control']); !!}
And then in the controller
public function editRegisteredUsersRoles(Request $request)
{
foreach ($request->users as $user_id => $role) {
//...
}
}
I'm not 100% sure of what your problem is, are you saying that there aren't all of the users' roles in the Request when you dd($request) ?
I think the problem lies in the fact that you are looping through the users throwing down select boxes with the same name. Generally, when you send a POST request, you access the information by saying $_POST[<Form's name>], so maybe there is a problem with duplication here. Perhaps you should try something like:
{!! Form::select('role' . $user->id, $roles, $user->role->label, ['class' => 'form-control']); !!}
What I changed above is simply tacking on the user's id to the name 'role' in order to make each of those unique.

When I submit a form on Laravel I get error message: MethodNotAllowedHttpException in RouteCollection.php line 219?

When I submit my form I receive the following error: 'MethodNotAllowedHttpException in RouteCollection.php line 219'.
How do I solve this? I have looked at various forums and other threads where this has been answered but none have worked for me.
My route file is as follows:
<?php
/*
This is the file in which the rules for how users will use the application are kept
*/
Route::get('/',function() {
return view('welcome');
});
Route::auth();
Route::get('/home', 'HomeController#index');
Route::resource('/questionnaires', 'QuestionnairesController');
Route::resource('/questions', 'QuestionsController');
Route::resource('/answers', 'AnswersController');
\
My create.blade.php file along with the form looks like this:
#extends('layouts.master')
#section('title', 'Create Questionnaire | SurveySays!')
#section('content')
<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12">
<h1>Create Questionnaire</h1>
<h3>Create your questionnaire using the form below. Give it a title, a small description and write your ethical considerations:</h3>
#if($errors->any())
<div class="alert alert-danger">
#foreach($errors->all() as $error)
<p>{{ $error }}</p>
#endforeach
</div>
#endif
{!! Form::open(array('url' => '/questionnaires/create')) !!}
<div class="container-fluid">
<div class="form-group">
{!! Form::label('title', 'Title:') !!}
{!! Form::text('title',null,['id' => 'title','class' => 'form-control']) !!}
</div>
<div class="form-group">
{!! Form::label('description', 'Description:') !!}
{!! Form::textarea('description',null,['class' => 'form-control']) !!}
</div>
<div class="form-group">
{!! Form::label('ethics', 'Ethical considerations:') !!}
{!! Form::textarea('ethics',null,['class' => 'form-control']) !!}
</div>
<div class="form-group">
{!! Form::submit('Create', array('class' => 'btn btn-success form-control')) !!}
</div>
</div>
</div>
{!! Form::close() !!}
#endsection
Thanks :)
You should use store method instead. Also, use route, not URL (you don't want to hardcode it):
{!! Form::open(array('route' => 'questionnaires.store') !!}
create method is used to display form to a user. And store used to validate and persist user input data into DB.
More about RESTful resource controllers here.
I see that you didn't setup any POST routes, that means that you cannot send a HTTP POST request to your Laravel site.
If you add this, it will be fine.
Route::post('/questionnaires/create', 'QuestionnairesController#create');
This will setup a route (HTTP POST request) to the QuestionnairesController with the function create().
Hope this works!
Because create only allows GET requests to show the form.
https://laravel.com/docs/5.2/controllers#restful-resource-controllers
Add 'method' => 'post' to your Form::open() array and point it at just /questionnaires.

Laravel 4 Preview Form Submit

Any idea how to solve the following approach.
I have a form and want to display the entered data in a specific formtemplate before store it in the DB. If the entered data looks properly, the user can save the form.So I am searching for a way to display the entered data as a preview in a new window/tab first. With my code below I am not able to preview the form without saving the data in the databse. Also display the preview in a new window or tab is not possible. I guess there is no way to achieve this with php / laravel. I tried some onlick events, but no luck. As it seems like the route is prefered.
Any idea how to solve this?
My form looks like:
{{ Form::open(array('url' => 'backend/menubuilder/'.$id, 'method' => 'PUT'))}}
<section>
<div class="container">
<div class="row">
<div class="inputBox">
<div class="col-xs-12 col-md-6">
<h3>Montag</h3>
<div class="form-group">
{{Form::label('gericht_1_mo','Gericht 1')}}
{{Form::textarea('gericht_1_mo', Auth::user()->gericht_1_mo,array('class' => 'form-control'))}}
</div>
<div class="form-group">
{{Form::label('preis_1_mo','Preis', array('class' => 'col-md-6'))}}
{{Form::text('preis_1_mo', Auth::user()->preis_1_mo, array('class' => 'col-md-6'))}}
</div>
<div class="form-group mrgT55">
{{Form::label('gericht_2_mo','Gericht 2')}}
{{Form::textarea('gericht_2_mo', Auth::user()->gericht_2_mo,array('class' => 'form-control'))}}
</div>
<div class="form-group">
{{Form::label('preis_2_mo','Preis', array('class' => 'col-md-6'))}}
{{Form::text('preis_2_mo', Auth::user()->preis_2_mo, array('class' => 'col-md-6'))}}
</div>
</div>
</div>
</div>
</div>
</div>
{{Form::submit('update')}}
{{-- <input type="submit" name="preview" value="preview"> --}}
{{Form::close()}}
{{ Form::open(array('url' => 'backend/menubuilder/templatesview/'.$id, 'method' => 'POST'))}}
{{-- {{Form::submit('Preview',array('onClick' => 'target_blank'))}} --}}
<input onclick="newTab()" type="submit" name="preview" value="preview" >
{{Form::close()}}
My routes:
Route::get('backend/menubuilder/templates/{id}', 'MenuBuilderController#template');
Route::post('backend/menubuilder/templatesview/{id}', 'MenuBuilderController#preview');
My Controller:
public function preview($id)
{
$user = User::find($id);
$owner = (Auth::id() === (int) $id);
return View::make('backend/menubuilder/templatesview/tempone')->withUser($user)->withOwner($owner);
}
public function template($id)
{
$user = User::find($id);
$owner = (Auth::id() === (int) $id);
return View::make('backend/menubuilder/templates/tempone')->withUser($user)->withOwner($owner);
}