sort register with knpPaginator in symfony2.8 - symfony-2.8

I'm learning Symfony Framework (version2.8). I'm working with knpPaginator, to show all users from my database. Now I'm trying to sort register, but I can't.
This is an image of my project until now
Users View
When I click on name(Nombre) filter, this error appears
There is no component aliased by [u] in the given Query
Please your help
Thanks

Configuration:
knp_paginator:
page_range: 5 # default page range used in pagination control
default_options:
page_name: page # page query parameter name
sort_field_name: sort # sort field query parameter name
sort_direction_name: direction # sort direction query parameter name
distinct: true # ensure distinct results, useful when ORM queries are using GROUP BY statements
template:
pagination: KnpPaginatorBundle:Pagination:sliding.html.twig # sliding pagination controls template
sortable: KnpPaginatorBundle:Pagination:sortable_link.html.twig # sort link template
Controller:
public function listAction(Request $request)
{
$em = $this->get('doctrine.orm.entity_manager');
$dql = "SELECT a FROM AcmeMainBundle:Article a";
$query = $em->createQuery($dql);
$paginator = $this->get('knp_paginator');
$pagination = $paginator->paginate(
$query, /* query NOT result */
$request->query->getInt('page', 1)/*page number*/,
10/*limit per page*/
);
// parameters to template
return $this->render('AcmeMainBundle:Article:list.html.twig', array('pagination' => $pagination));
}
View:
{# total items count #}
<div class="count">
{{ pagination.getTotalItemCount }}
</div>
<table>
<tr>
{# sorting of properties based on query components #}
<th>{{ knp_pagination_sortable(pagination, 'Id', 'a.id') }}</th>
<th{% if pagination.isSorted('a.Title') %} class="sorted"{% endif %}> {{ knp_pagination_sortable(pagination, 'Title', 'a.title') }}</th>
<th>{{ knp_pagination_sortable(pagination, 'Release', ['a.date', 'a.time']) }}</th>
</tr>
{# table body #}
{% for article in pagination %}
<tr {% if loop.index is odd %}class="color"{% endif %}>
<td>{{ article.id }}</td>
<td>{{ article.title }}</td>
<td>{{ article.date | date('Y-m-d') }}, {{ article.time | date('H:i:s') }}</td>
</tr>
{% endfor %}
</table>
{# display navigation #}
<div class="navigation">
{{ knp_pagination_render(pagination) }}
</div>
More details:
https://github.com/KnpLabs/KnpPaginatorBundle

This is my Code:
Config.yml
# KnpPaginatorBundle
knp_paginator:
page_range: 5 # default page range used in pagination control
default_options:
page_name: page # page query parameter name
sort_field_name: sort # sort field query parameter name
sort_direction_name: direction # sort direction query parameter name
distinct: true # ensure distinct results, useful when ORM queries are using GROUP BY statements
template:
pagination: KnpPaginatorBundle:Pagination:twitter_bootstrap_v3_pagination.html.twig # sliding pagination controls template
sortable: KnpPaginatorBundle:Pagination:sortable_link.html.twig # sort link template
My UserController
<?php
namespace SRQ\UserBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Form\FormError;
use SRQ\UserBundle\Entity\User;
use SRQ\UserBundle\Form\UserType;
class UserController extends Controller
{
public function indexAction(Request $request)
{
$searchQuery = $request->get('query');
if(!empty($searchQuery))
{
$finder = $this->container->get('fos_elastica.finder.app.user');
$users = $finder->createPaginatorAdapter($searchQuery);
}
else
{
$fm = $this->getDoctrine()->getManager();
$dql = "SELECT u FROM SRQUserBundle:User u ORDER BY u.id DESC";
$users = $fm->createQuery($dql);
}
$paginator = $this->get('knp_paginator');
$pagination = $paginator->paginate(
$users, $request->query->getInt('page', 1),
5
);
$deleteFormAjax = $this->createCustomForm(':USER_ID', 'DELETE', 'srq_user_delete');
return $this->render('SRQUserBundle:User:index.html.twig', array('pagination' => $pagination,
'delete_form_ajax' => $deleteFormAjax->createView()));
}
public function addAction()
{
$user = new User();
$form = $this->createCreateForm($user);
return $this->render('SRQUserBundle:User:add.html.twig', array('form' => $form->createView()));
}
private function createCreateForm(User $entity)
{
$form = $this->createForm(new UserType(), $entity, array(
'action' => $this->generateUrl('srq_user_create'),
'method' => 'POST'
));
return $form;
}
public function createAction(Request $request)
{
$user = new User();
$form = $this->createCreateForm($user);
$form->handleRequest($request);
if($form->isValid())
{
$password = $form->get('password')->getData();
$passwordConstraint = new Assert\NotBlank();
$errorList = $this->get('validator')->validate($password, $passwordConstraint);
if(count($errorList) == 0)
{
$encoder = $this->container->get('security.password_encoder');
$encoded = $encoder->encodePassword($user, $password);
$user->setPassword($encoded);
$fm = $this->getDoctrine()->getManager();
$fm->persist($user);
$fm->flush();
$successMessage = $this->get('translator')->trans('The user has been created.');
$this->addFlash('mensaje', $successMessage);
return $this->redirectToRoute('srq_user_index');
}
else
{
$errorMessage = new FormError($errorList[0]->getMessage());
$form->get('password')->addError($errorMessage);
}
}
return $this->render('SRQUserBundle:User:add.html.twig', array('form' =>$form->createView()));
}
public function editAction($id)
{
$fm = $this->getDoctrine()->getManager();
$user = $fm->getRepository('SRQUserBundle:User')->find($id);
if(!$user)
{
$messageException = $this->get('translator')->trans('User not found.');
throw $this->createNotFoundException('$messageException');
}
$form = $this->createEditForm($user);
return $this->render('SRQUserBundle:User:edit.html.twig', array('user' => $user, 'form' => $form->createView()));
}
private function createEditForm(User $entity)
{
$form = $this->createForm(new UserType(), $entity, array('action' => $this->generateUrl('srq_user_update', array('id' => $entity->getId())), 'method' => 'PUT'));
return $form;
}
public function updateAction($id, Request $request)
{
$fm = $this->getDoctrine()->getManager();
$user = $fm->getRepository('SRQUserBundle:User')->find($id);
if(!$user)
{
$messageException = $this->get('translator')->trans('User not found.');
throw $this->createNotFoundException('$messageException');
}
$form = $this->createEditForm($user);
$form ->handleRequest($request);
if($form->isSubmitted() && $form->isValid())
{
$password = $form->get('password')->getData();
if(!empty($password))
{
$encoder = $this->container->get('security.password_encoder');
$encoded = $encoder->encodePassword($user, $password);
$user->setPassword($encoded);
}
else
{
$recoverPass = $this->recoverPass($id);
$user->setPassword($recoverPass[0]['password']);
}
if($form->get('role')->getData() == 'ROLE_ADMIN')
{
$user->setIsActive(1);
}
$fm->flush();
$successMessage = $this->get('translator')->trans('The user has been modified.');
$this->addFlash('mensaje', $successMessage);
return $this->redirectToRoute('srq_user_edit', array('id' => $user->getId()));
}
return $this->render('SRQUserBundle:User:edit.html.twig', array('user' => $user, 'form' => $form->createView()));
}
private function recoverPass($id)
{
$fm = $this->getDoctrine()->getManager();
$query = $fm->createQuery(
'SELECT u.password
FROM SRQUserBundle:User u
WHERE u.id = :id'
)->setParameter('id', $id);
$currentPass = $query->getResult();
return $currentPass;
}
public function viewAction($id)
{
$repository = $this->getDoctrine()->getRepository('SRQUserBundle:User');
$user = $repository->find($id);
if(!$user)
{
$messageException = $this->get('translator')->trans('User not found.');
throw $this->createNotFoundException('$messageException');
}
$deleteForm = $this->createCustomForm($user->getId(), 'DELETE', 'srq_user_delete');
return $this->render('SRQUserBundle:User:view.html.twig', array('user' => $user, 'delete_form' => $deleteForm->createView()));
}
private function createDeleteForm($user)
{
return $this->createFormBuilder()
->setAction($this->generateUrl('srq_user_delete', array('id' => $user->getId())))
->setMethod('DELETE')
->getForm();
}
public function deleteAction(Request $request, $id)
{
$fm = $this->getDoctrine()->getManager();
$user = $fm->getRepository('SRQUserBundle:User')->find($id);
if(!$user)
{
$messageException = $this->get('translator')->trans('User not found.');
throw $this->createNotFoundException('$messageException');
}
$allUsers = $fm->getRepository('SRQUserBundle:User')->findAll();
$countUsers = count($allUsers);
$form = $this->createCustomForm($user->getId(), 'DELETE', 'srq_user_delete');
$form->handleRequest($request);
if($form->isSubmitted() && $form->isValid())
{
if($request->isXMLHttpRequest())
{
$res = $this->deleteUser($user->getRole(), $fm, $user);
return new Response(
json_encode(array('removed' => $res['removed'], 'message' => $res['message'], 'countUsers' => $countUsers)),
200,
array('Content-Type' => 'application/json')
);
}
$res = $this->deleteUser($user->getRole(), $fm, $user);
$this->addFlash($res['alert'], $res['message']);
return $this->redirectToRoute('srq_user_index');
}
}
private function deleteUser($role, $fm, $user)
{
if($role == 'ROLE_USER')
{
$fm->remove($user);
$fm->flush();
$message = $this->get('translator')->trans('The user has been deleted.');
$removed = 1;
$alert = 'mensaje';
}
elseif($role == 'ROLE_ADMIN')
{
$message = $this->get('translator')->trans('The user could not be deleted.');
$removed = 0;
$alert = 'error';
}
return array('removed' => $removed, 'message' => $message, 'alert' => $alert);
}
private function createCustomForm($id, $method, $route)
{
return $this->createFormBuilder()
->setAction($this->generateUrl($route, array('id' => $id)))
->setMethod($method)
->getForm();
}
}
My Views/User/index.html.twig
{% extends 'layout.html.twig' %}
{% block body %}
{{ parent() }}
{# Progress bar #}
<div class="progress no-border hidden" id="delete-progress">
<div class="progress-bar progress-bar-striped active" role="progressbar" aria-valuenow="45" aria-valuemin="0" aria-valuemax="100" style="width: 100%">
<span class="sr-only">Loading...</span>
</div>
</div>
{{ include('SRQUserBundle:User:messages/success.html.twig') }}
{{ include('SRQUserBundle:User:messages/danger.html.twig') }}
<div class="container">
<div class="col-md-12">
<div class="page-header margin-none">
<h2 class="padding-none">{% trans %} Users {% endtrans %}</h2>
</div>
<div class="table-responsive">
{% trans %} Total records: {% endtrans %} <span id="total">{{ pagination.getTotalItemCount }}</span>
<p>
<form method="get" action="" class="form-inline" role="search">
<div class="form-group">
<input type="text" name="query" value="{{ app.request.get('query') }}" class="form-control" placeholder="{{'Search user'|trans}}" required />
</div>
<input type="submit" value="{{ 'Search'|trans }}" class="btn btn-default">
</form>
{% if not pagination|length %}
<h2>{{ 'No search results'|trans}}</h2>
{% endif %}
{% if pagination|length %}
<br>
<table class="table table-striped table-hover">
<thead>
<tr>
<th> {{ knp_pagination_sortable(pagination, 'Username'|trans, 'u
.username') }}</th>
<th{% if pagination.isSorted('u.firstName') %} class="sorted"{% endif %}>{{ knp_pagination_sortable(pagination, 'First name'|trans, 'u
.firstName') }}</th>
<th> {{ knp_pagination_sortable(pagination, 'Last name'|trans, 'u
.lastName') }} </th>
<th> {{ knp_pagination_sortable(pagination, 'Email'|trans, 'u
.email') }} </th>
<th> {{ knp_pagination_sortable(pagination, 'Role'|trans, 'u
.role') }} </th>
<th> {{ knp_pagination_sortable(pagination, 'Created'|trans, 'u
.createdAt') }} </th>
<th> {{ knp_pagination_sortable(pagination, 'Updated'|trans, 'u
.updatedAt') }} </th>
<th>{{ 'Actions'| trans}}</th>
</tr>
</thead>
<tbody>
{% for user in pagination %}
<tr data-id="{{ user.id }}">
<td>{{ user.username }}</td>
<td>{{ user.firstName }}</td>
<td>{{ user.lastName }}</td>
<td>{{ user.email }}</td>
<td>
{% if user.role == 'ROLE_ADMIN' %}
<strong>
{% trans %} Administrator {% endtrans %}
</strong>
{% elseif user.role == 'ROLE_USER' %}
<strong>
{% trans %} User {% endtrans %}
</strong>
{% endif %}
</td>
<td>{{ user.createdAt|date('d-m-Y H:i') }}</td>
<td>{{ user.updatedAt|date('d-m-Y H:i') }}</td>
<td class="actions">
<a href="{{ path('srq_user_view', { id: user.id }) }}" class="btn btn-sm btn-info">
{{ 'View'|trans }}
</a>
<a href="{{ path('srq_user_edit', { id: user.id }) }}" class="btn btn-sm btn-primary">
{{ 'Edit'|trans }}
</a>
<a href="#" class="btn btn-sm btn-danger btn-delete">
{{ 'Delete'|trans }}
</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endif %}
{# Display navigation #}
<div class="navigation">
{{ knp_pagination_render(pagination) }}
</div>
</div>
</div>
</div>
{{ include('SRQUserBundle:User:forms/form.html.twig', { form: delete_form_ajax, message: 'Are you sure ?'|trans, id: 'form-delete', with_submit: false}) }}
{% endblock %}
{% block javascripts %}
{{ parent() }}
<script src="{{ asset('bundles/srquser/js/delete-user.js') }}"></script>
{% endblock %}
Sorting by name
Sort_image
Error message:
There is no component aliased by [u
] in the given Query
500 Internal Server Error - UnexpectedValueException
Stack Trace
in vendor/knplabs/knp-components/src/Knp/Component/Pager/Event/Subscriber/Sortable/Doctrine/ORM/Query/OrderByWalker.php at line 54 -
$alias = $aliases[$index];
if ($alias !== false) {
if (!array_key_exists($alias, $components)) {
throw new \UnexpectedValueException("There is no component aliased by [{$alias}] in the given Query");
}
$meta = $components[$alias];
if (!$meta['metadata']->hasField($field)) {
at OrderByWalker ->walkSelectStatement (object(SelectStatement))
in vendor/doctrine/orm/lib/Doctrine/ORM/Query/TreeWalkerChain.php at line 112 +
at TreeWalkerChain ->walkSelectStatement (object(SelectStatement))
in vendor/doctrine/orm/lib/Doctrine/ORM/Query/Parser.php at line 380 +
at Parser ->parse ()
in vendor/doctrine/orm/lib/Doctrine/ORM/Tools/Pagination/Paginator.php at line 260 +
at Paginator ->getCountQuery ()
in vendor/doctrine/orm/lib/Doctrine/ORM/Tools/Pagination/Paginator.php at line 123 +
at Paginator ->count ()
at count (object(Paginator))
in vendor/knplabs/knp-components/src/Knp/Component/Pager/Event/Subscriber/Paginate/Doctrine/ORM/QuerySubscriber/UsesPaginator.php at line 47 +
at UsesPaginator ->items (object(ItemsEvent), 'knp_pager.items', object(TraceableEventDispatcher))
at call_user_func (array(object(UsesPaginator), 'items'), object(ItemsEvent), 'knp_pager.items', object(TraceableEventDispatcher))
in vendor/symfony/symfony/src/Symfony/Component/EventDispatcher/Debug/WrappedListener.php at line 61 +
at WrappedListener ->__invoke (object(ItemsEvent), 'knp_pager.items', object(ContainerAwareEventDispatcher))
at call_user_func (object(WrappedListener), object(ItemsEvent), 'knp_pager.items', object(ContainerAwareEventDispatcher))
in app/cache/dev/classes.php at line 1858 +
at EventDispatcher ->doDispatch (array(object(WrappedListener), object(WrappedListener), object(WrappedListener), object(WrappedListener), object(WrappedListener), object(WrappedListener), object(WrappedListener), object(WrappedListener), object(WrappedListener), object(WrappedListener), object(WrappedListener), object(WrappedListener), object(WrappedListener), object(WrappedListener), object(WrappedListener), object(WrappedListener), object(WrappedListener), object(WrappedListener), object(WrappedListener), object(WrappedListener), object(WrappedListener)), 'knp_pager.items', object(ItemsEvent))
in app/cache/dev/classes.php at line 1773 +
at EventDispatcher ->dispatch ('knp_pager.items', object(ItemsEvent))
in vendor/symfony/symfony/src/Symfony/Component/EventDispatcher/Debug/TraceableEventDispatcher.php at line 140 +
at TraceableEventDispatcher ->dispatch ('knp_pager.items', object(ItemsEvent))
in vendor/knplabs/knp-components/src/Knp/Component/Pager/Paginator.php at line 113 +
at Paginator ->paginate (object(Query), '1', '5')
in src/SRQ/UserBundle/Controller/UserController.php at line 38 +
at UserController ->indexAction (object(Request))
at call_user_func_array (array(object(UserController), 'indexAction'), array(object(Request)))
in vendor/symfony/symfony/src/Symfony/Component/HttpKernel/HttpKernel.php at line 144 +
at HttpKernel ->handleRaw (object(Request), '1')
in vendor/symfony/symfony/src/Symfony/Component/HttpKernel/HttpKernel.php at line 64 +
at HttpKernel ->handle (object(Request), '1', true)
in vendor/symfony/symfony/src/Symfony/Component/HttpKernel/DependencyInjection/ContainerAwareHttpKernel.php at line 69 +
at ContainerAwareHttpKernel ->handle (object(Request), '1', true)
in vendor/symfony/symfony/src/Symfony/Component/HttpKernel/Kernel.php at line 185 +
at Kernel ->handle (object(Request))
in web/app_dev.php at line 32 +
Logs -
1 error
INFO - Matched route "srq_user_index".
INFO - Populated the TokenStorage with an anonymous Token.
DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\DebugHandlersListener::configure".
DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\ProfilerListener::onKernelRequest".
DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\DumpListener::configure".
DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\ValidateRequestListener::onKernelRequest".
DEBUG - Notified event "kernel.request" to listener "Symfony\Bundle\FrameworkBundle\EventListener\SessionListener::onKernelRequest".
DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\FragmentListener::onKernelRequest".
DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\RouterListener::onKernelRequest".
DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\LocaleListener::onKernelRequest".
DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\TranslatorListener::onKernelRequest".
DEBUG - Notified event "kernel.request" to listener "Symfony\Component\Security\Http\Firewall::onKernelRequest".
DEBUG - Notified event "kernel.request" to listener "Knp\Bundle\PaginatorBundle\Subscriber\SlidingPaginationSubscriber::onKernelRequest".
DEBUG - Notified event "kernel.controller" to listener "Symfony\Bundle\FrameworkBundle\DataCollector\RouterDataCollector::onKernelController".
DEBUG - Notified event "kernel.controller" to listener "Symfony\Component\HttpKernel\DataCollector\RequestDataCollector::onKernelController".
DEBUG - Notified event "kernel.controller" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\ControllerListener::onKernelController".
DEBUG - Notified event "kernel.controller" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\ParamConverterListener::onKernelController".
DEBUG - Notified event "kernel.controller" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\HttpCacheListener::onKernelController".
DEBUG - Notified event "kernel.controller" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\SecurityListener::onKernelController".
DEBUG - Notified event "kernel.controller" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\TemplateListener::onKernelController".
DEBUG - Notified event "knp_pager.before" to listener "Knp\Component\Pager\Event\Subscriber\Sortable\SortableSubscriber::before".
DEBUG - Notified event "knp_pager.before" to listener "Knp\Component\Pager\Event\Subscriber\Filtration\FiltrationSubscriber::before".
DEBUG - Notified event "knp_pager.before" to listener "Knp\Component\Pager\Event\Subscriber\Paginate\PaginationSubscriber::before".
CRITICAL - Uncaught PHP Exception UnexpectedValueException: "There is no component aliased by [u ] in the given Query" at /home/ubuntu/workspace/vendor/knplabs/knp-components/src/Knp/Component/Pager/Event/Subscriber/Sortable/Doctrine/ORM/Query/OrderByWalker.php line 54
DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\DebugHandlersListener::configure".
DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\ProfilerListener::onKernelRequest".
DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\DumpListener::configure".
DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\ValidateRequestListener::onKernelRequest".
DEBUG - Notified event "kernel.request" to listener "Symfony\Bundle\FrameworkBundle\EventListener\SessionListener::onKernelRequest".
DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\FragmentListener::onKernelRequest".
DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\RouterListener::onKernelRequest".
DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\LocaleListener::onKernelRequest".
DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\TranslatorListener::onKernelRequest".
DEBUG - Notified event "kernel.request" to listener "Symfony\Component\Security\Http\Firewall::onKernelRequest".
DEBUG - Notified event "kernel.request" to listener "Knp\Bundle\PaginatorBundle\Subscriber\SlidingPaginationSubscriber::onKernelRequest".
DEBUG - Notified event "kernel.controller" to listener "Symfony\Bundle\FrameworkBundle\DataCollector\RouterDataCollector::onKernelController".
DEBUG - Notified event "kernel.controller" to listener "Symfony\Component\HttpKernel\DataCollector\RequestDataCollector::onKernelController".
DEBUG - Notified event "kernel.controller" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\ControllerListener::onKernelController".
DEBUG - Notified event "kernel.controller" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\ParamConverterListener::onKernelController".
DEBUG - Notified event "kernel.controller" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\HttpCacheListener::onKernelController".
DEBUG - Notified event "kernel.controller" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\SecurityListener::onKernelController".
DEBUG - Notified event "kernel.controller" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\TemplateListener::onKernelController".
Stack Trace (Plain Text)

Related

BadMethodCallException Call to undefined method App\Models\BatterFirst::index() [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
This question does not appear to be about programming within the scope defined in the help center.
Closed 1 year ago.
Improve this question
I want to add some data but I got
BadMethodCallException
Call to undefined method App\Models\BatterFirst::index()
error
where my model BatterFirst.php is
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class BatterFirst extends Model
{
use HasFactory;
protected $fillable = [
'name', 'runs', 'balls', 'sixs', 'fours'
];
}
This is my controller BatterFirstController.php
<?php
namespace App\Http\Controllers;
use App\Models\BatterFirst;
use Illuminate\Http\Request;
class BatterFirstController extends Controller
{
/**
* Display a listing of the resource.
*
* #return \Illuminate\Http\Response
*/
public function index()
{
$data = BatterFirst::latest()->paginate(5);
return view('BatterFirst.index',compact('data'))
->with('i', (request()->input('page', 1) - 1) * 5);
}
/**
* Show the form for creating a new resource.
*
* #return \Illuminate\Http\Response
*/
public function create()
{
return view('BatterFirst.create');
}
/**
* Store a newly created resource in storage.
*
* #param \Illuminate\Http\Request $request
* #return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$request->validate([
'name' => 'required',
'runs' => 'required',
'balls' => 'required',
'sixs' => 'required',
'fours' => 'required',
]);
BatterFirst::create($request->all());
return redirect()->route('BatterFirst.index')
->with('success','Batter created successfully.');
}
/**
* Display the specified resource.
*
* #param \App\Models\BatterFirst $batterFirst
* #return \Illuminate\Http\Response
*/
public function show(BatterFirst $batterFirst)
{
return view('BatterFirst.show',compact('BatterFirst'));
}
/**
* Show the form for editing the specified resource.
*
* #param \App\Models\BatterFirst $batterFirst
* #return \Illuminate\Http\Response
*/
public function edit(BatterFirst $batterFirst)
{
return view('BatterFirst.edit',compact('BatterFirst'));
}
/**
* Update the specified resource in storage.
*
* #param \Illuminate\Http\Request $request
* #param \App\Models\BatterFirst $batterFirst
* #return \Illuminate\Http\Response
*/
public function update(Request $request, BatterFirst $batterFirst)
{
$request->validate([
'name' => 'required',
'runs' => 'required',
'balls' => 'required',
'sixs' => 'required',
'fours' => 'required',
]);
$batterFirst->update($request->all());
return redirect()->route('BatterFirst.index')
->with('success','Batter updated successfully');
}
/**
* Remove the specified resource from storage.
*
* #param \App\Models\BatterFirst $batterFirst
* #return \Illuminate\Http\Response
*/
public function destroy(BatterFirst $batterFirst)
{
$batterFirst->delete();
return redirect()->route('BatterFirst.index')
->with('success','Batter deleted successfully');
}
}
This is my web.php
<?php
use App\Models\BatterFirst;
use Illuminate\Support\Facades\Route;
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
Route::get('/', function () {
return view('welcome');
});
Route::resource('BatterFirst', BatterFirst::class);
This is my BatterFrist/index.php
#extends('BatterFirst.layout')
#section('content')
<div class="row" style="margin-top: 5rem;">
<div class="col-lg-12 margin-tb">
<div class="pull-left">
<h2>Laravel 8 CRUD Example from scratch - laravelcode.com</h2>
</div>
<div class="pull-right">
<a class="btn btn-success" href="{{ route('BatterFirst.create') }}"> Create New Post</a>
</div>
</div>
</div>
#if ($message = Session::get('success'))
<div class="alert alert-success">
<p>{{ $message }}</p>
</div>
#endif
<table class="table table-bordered">
<tr>
<th>No</th>
<th>Name</th>
<th>Runs</th>
<th>Balls</th>
<th>Sixs</th>
<th>Fours</th>
<th>Strick Rate</th>
</tr>
#foreach ($data as $key => $value)
<tr>
<td>{{ ++$i }}</td>
<td>{{ $value->name }}</td>
<td>{{ $value->runs }}</td>
<td>{{ $value->overs }}</td>
<td>{{ $value->balls }}</td>
<td>{{ $value->sixs }}</td>
<td>{{ $value->fours }}</td>
{{-- <td>{{ $value->runs/$value->balls*100 }}</td> --}}
<td>#if ($value->runs > 0 and $value->runs ==0)
{{ $value->runs*100 }}
#elseif ($value->balls>0 and $value->runs ==0)
{{ $value->balls*$value->runs }}
#elseif ($value->balls==0 and $value->runs ==0)
{{ $value->balls * $value->runs }}
#elseif ($value->runs>0 and $value->balls>=0)
{{ $value->runs/$value->balls*100 }}
#endif
</td>
<td>
<form action="{{ route('BatterFirst.destroy',$value->id) }}" method="POST">
<a class="btn btn-info" href="{{ route('BatterFirst.show',$value->id) }}">Show</a>
<a class="btn btn-primary" href="{{ route('BatterFirst.edit',$value->id) }}">Edit</a>
#csrf
#method('DELETE')
<button type="submit" class="btn btn-danger">Delete</button>
</form>
</td>
</tr>
#endforeach
</table>
{!! $data->links() !!}
#endsection
What is the problem here? Thanks for helping me.
If you need anything more like more detailed code then ask me I will update it.
Note: I am just a beginner at laravel
You have to use the controller in web.php not model
use App\Http\Controllers\BatterFirstController;
Route::resource('BatterFirst', [BatterFirstController::class]);
Now you can call from any where e.g
In example.blade.php file
<a href={{'BatterFirst.index'}}>Index<a/>
Let's debug your code, starting where a request comes in to the application - at the routes file:
Route::resource('BatterFirst', BatterFirst::class);
You have a resource() route handled by BatterFirst::class. But where is that class? It has to map to something, and if you look at the top of that same routes file we see:
use App\Models\BatterFirst;
So a request for yoursite.com/BatterFirst/ will be handled by the index() method in your BatterFirst model. But of course there is no such method.
Stepping back, it is obvious you want the Controller to handle your routes, not your Model. Remove that use line at the top of your routes file, and replace it with:
use App\Http\Controllers\BatterFirstController;
And update your routes to be handled by that controller:
Route::resource('BatterFirst', BatterFirstController::class);

upload excel file for specific user in laravel-8 General error: 1364 Field 'user_id' doesn't have a default value

The idea is
a user have many data but all data belongsto one user
i am fasing SQLSTATE[HY000]: General error: 1364 Field 'user_id' doesn't have a default value (SQL: insert into projects (name, detail, color, image, logo, updated_at, created_at) values (shahed, kjfs, fsdkf, fdsfsd, fds, 2021-05-30 08:45:35, 2021-05-30 08:45:35)) error.
If you neen more detail you can ask
This is my model project.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Project extends Model
{
use HasFactory;
protected $fillable = [
'name', 'detail', 'image','color','logo','user_id'
];
public function getUser(){
return $this->belongsTo(User::class);
}
}
This is model user.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Fortify\TwoFactorAuthenticatable;
use Laravel\Jetstream\HasProfilePhoto;
use Laravel\Sanctum\HasApiTokens;
class User extends Authenticatable
{
use HasApiTokens;
use HasFactory;
use HasProfilePhoto;
use Notifiable;
use TwoFactorAuthenticatable;
/**
* The attributes that are mass assignable.
*
* #var array
*/
public function getProducts(){
return $this->hasMany('App\Models\Product');
}
public function getProject(){
return $this->hasMany('App\Models\Project');
}
// public function products(){
// return $this->hasMany(Product::class);
// }
protected $fillable = [
'name',
'email',
'password',
];
/**
* The attributes that should be hidden for arrays.
*
* #var array
*/
protected $hidden = [
'password',
'remember_token',
'two_factor_recovery_codes',
'two_factor_secret',
];
/**
* The attributes that should be cast to native types.
*
* #var array
*/
protected $casts = [
'email_verified_at' => 'datetime',
];
/**
* The accessors to append to the model's array form.
*
* #var array
*/
protected $appends = [
'profile_photo_url',
];
}
This is project table projecttable.php
public function up()
{
Schema::create('projects', function (Blueprint $table) {
// $table->('id');
$table->bigIncrements('id');
$table->string('name', 255)->nullable();
$table->string('detail', 500)->nullable();
$table->string('color', 255)->nullable();
$table->decimal('image', 22)->nullable();
$table->decimal('logo', 22)->nullable();
$table->unsignedBigInteger('user_id');
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->timestamp('created_at')->useCurrent();
$table->timestamp('updated_at')->nullable();
});
}
This is importProject.php
public function model(array $row)
{
return new Project([
'name' => $row['name'],
'detail' => $row['detail'],
'color' => $row['color'],
'image' => $row['image'],
'logo' => $row['logo'],
]);
}
This is projectController.php
<?php
namespace App\Http\Controllers;
use App\Exports\UsersExport;
use App\Models\Project;
use App\Imports\ProjectsImport;
use Maatwebsite\Excel\Facades\Excel;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class ProjectController extends Controller
{
/**
* Display a listing of the resource.
*
* #return \Illuminate\Http\Response
*/
public function index()
{
$projects = Project::where('user_id',auth()->user()->id)->latest()->paginate(20);
// $projects = Project::paginate(20);
return view('projects.index', compact('projects'))
->with('i', (request()->input('page', 1) - 1) * 5);
}
/**
* Show the form for creating a new resource.
*
* #return \Illuminate\Http\Response
*/
public function create()
{
return view('projects.create');
}
/**
* Store a newly created resource in storage.
*
* #param \Illuminate\Http\Request $request
* #return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$request->validate([
'name' => 'required',
'detail' => 'required',
'color' => 'required',
'image' => 'required',
'logo' => 'required',
]);
$input = $request->all();
$input['user_id'] = auth()->user()->id;
Project::create($input);
return redirect()->route('project.index')
->with('success','Product created successfully.');
}
/**
* Display the specified resource.
*
* #param \App\Models\Project $project
* #return \Illuminate\Http\Response
*/
public function show(Project $project)
{
return view('projects.show', compact('project'));
}
/**
* Show the form for editing the specified resource.
*
* #param \App\Models\Project $project
* #return \Illuminate\Http\Response
*/
public function edit(Project $project)
{
return view('projects.edit', compact('project'));
}
/**
* Update the specified resource in storage.
*
* #param \Illuminate\Http\Request $request
* #param \App\Models\Project $project
* #return \Illuminate\Http\Response
*/
public function update(Request $request, Project $project)
{
$user_id = Auth::user()->id ;
$request->validate([
'name' => 'required',
'detail' => 'required',
'color' => 'required',
'image' => 'required',
'logo' => 'required'
]);
$input = $request->all();
$project->update($input);
return redirect()->route('project.index')
->with('success','Product updated successfully');
}
/**
* Remove the specified resource from storage.
*
* #param \App\Models\Project $project
* #return \Illuminate\Http\Response
*/
public function destroy(Project $project)
{
$project->delete();
return redirect()->route('projects.index')
->with('success', 'Project deleted successfully');
}
public function importProject()
{
Excel::import(new ProjectsImport, request()->file('file'));
return back()->with('success','Project created successfully.');
}
public function export()
{
return Excel::download(new UsersExport, 'projects.xlsx');
}
}
this is index.blade.php
#extends('layouts.app')
#section('content')
<div class="row">
<div class="col-lg-12 margin-tb">
<div class="pull-left">
<h2>Laravel 8 CRUD </h2>
</div>
<div class="d-flex flex-row-reverse flex-column">
<div class="d-flex">
<a class="btn btn-success text-light mr-5" data-toggle="medel" id="mediumButton" data-target="#mediumModel"
data-attr="{{ route ('projects.create')}}" title="upload project">
<i class="fas fa-cloud-upload-alt fa-2x"></i>
</a>
<form action="{{ route('importProject') }}" method="POST" enctype="multipart/form-data" class="d-flex">
#csrf
<input type='file' name="file">
<button class="btn btn-info" style="margin-left: -60px" title="Import Project">
<i class="fas fa-cloud-upload-alt fa-2x"></i></button>
<a class="btn btn-warning" href="{{ route('export') }}">Export User Data</a>
</form>
</div>
</div>
<div class="pull-right">
<a class="btn btn-success text-light" data-toggle="modal" id="mediumButton" data-target="#mediumModal"
data-attr="{{ route('projects.create') }}" title="Create a project"> <i class="fas fa-plus-circle"></i>
</a>
</div>
</div>
</div>
#if ($message = Session::get('success'))
<div class="alert alert-success">
<p>{{ $message }}</p>
</div>
#endif
<table class="table table-bordered table-responsive-lg table-hover">
<thead class="thead-dark">
<tr>
<th scope="col">No</th>
<th scope="col">Name</th>
<th scope="col" width="30%">Details</th>
<th scope="col">color</th>
<th scope="col">image</th>
<th scope="col">logo</th>
<th scope="col">Date Created</th>
<th scope="col">Action</th>
</tr>
</thead>
<tbody>
#foreach ($projects as $project)
<tr>
<td scope="row">{{ ++$i }}</td>
<td>{{ $project->name }}</td>
<td>{{ $project->detail }}</td>
<td>{{ $project->color }}</td>
<td>{{ $project->image }}</td>
<td>{{ $project->logo }}</td>
<td>{{ date_format($project->created_at, 'jS M Y') }}</td>
<td>
<form action="{{ route('projects.destroy', $project->id) }}" method="POST">
<a data-toggle="modal" id="smallButton" data-target="#smallModal"
data-attr="{{ route('projects.show', $project->id) }}" title="show">
<i class="fas fa-eye text-success fa-lg"></i>
</a>
<a class="text-secondary" data-toggle="modal" id="mediumButton" data-target="#mediumModal"
data-attr="{{ route('projects.edit', $project->id) }}">
<i class="fas fa-edit text-gray-300"></i>
</a>
#csrf
#method('DELETE')
<button type="submit" title="delete" style="border: none; background-color:transparent;">
<i class="fas fa-trash fa-lg text-danger"></i>
</button>
</form>
</td>
</tr>
#endforeach
</tbody>
</table>
{!! $projects->links() !!}
<!-- small modal -->
<div class="modal fade" id="smallModal" tabindex="-1" role="dialog" aria-labelledby="smallModalLabel"
aria-hidden="true">
<div class="modal-dialog modal-sm" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body" id="smallBody">
<div>
<!-- the result to be displayed apply here -->
</div>
</div>
</div>
</div>
</div>
<!-- medium modal -->
<div class="modal fade" id="mediumModal" tabindex="-1" role="dialog" aria-labelledby="mediumModalLabel"
aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body" id="mediumBody">
<div>
<!-- the result to be displayed apply here -->
</div>
</div>
</div>
</div>
</div>
<script>
// display a modal (small modal)
$(document).on('click', '#smallButton', function(event) {
event.preventDefault();
let href = $(this).attr('data-attr');
$.ajax({
url: href,
beforeSend: function() {
$('#loader').show();
},
// return the result
success: function(result) {
$('#smallModal').modal("show");
$('#smallBody').html(result).show();
},
complete: function() {
$('#loader').hide();
},
error: function(jqXHR, testStatus, error) {
console.log(error);
alert("Page " + href + " cannot open. Error:" + error);
$('#loader').hide();
},
timeout: 8000
})
});
// display a modal (medium modal)
$(document).on('click', '#mediumButton', function(event) {
event.preventDefault();
let href = $(this).attr('data-attr');
$.ajax({
url: href,
beforeSend: function() {
$('#loader').show();
},
// return the result
success: function(result) {
$('#mediumModal').modal("show");
$('#mediumBody').html(result).show();
},
complete: function() {
$('#loader').hide();
},
error: function(jqXHR, testStatus, error) {
console.log(error);
alert("Page " + href + " cannot open. Error:" + error);
$('#loader').hide();
},
timeout: 8000
})
});
</script>
#endsection
Give auth value in import project like this :)
public function model(array $row)
{
return new Project([
'name' => $row['name'],
'detail' => $row['detail'],
'color' => $row['color'],
'image' => $row['image'],
'logo' => $row['logo'],
'user_id' => auth()->user()->id
]);
}

Method save does not exist laravel

i'am trying to change the satuts in database with clicking on button , so i got this error :
Method Illuminate\Support\Collection::save does not exist.
this is the controller :
public function completedUpdate(Request $request, rendezvous $rdv )
{
$data = DB::table('rdv')->get();
foreach($data as $rdv) {
if ( $rdv->Etat_de_rdv == 'en_attente' ) {
DB::table('rdv')->where('Etat_de_rdv','en_attente')->update(['Etat_de_rdv' => 'Accepter']);
}
}
$data->Etat_de_rdv = $request->changeStatus;
$data->save();
return redirect()->back()->with('message', 'Status changed!');
}
this is the view :
#foreach($pat as $lo)
#if ($lo->IDD== $med->ID)
<h3> {{ $lo->Nom_et_prénom }} </h3>
<p>{{ $lo->Numéro_de_téléphone }}</p>
<p>{{ $lo->date}}</p>
<p>{{ $lo->time }}</p>
#if($lo->Etat_de_rdv == "en_attente")
<form action="{{ route('completedUpdate', $lo->id) }}" method="POST">
{{ csrf_field() }}
<button type="submit" class="btn btn-success" name="changeStatus" value="Accepter">Active</button>
</form>
#else
<form action="{{ route('completedUpdate', $lo->id) }}" method="POST">
{{ csrf_field() }}
<button type="submit" class="btn btn-default" name="changeStatus" value="Charger">Inactive</button>
</form>
and this is the route :
Route::post('/completedUpdate/{id}', 'rendezv#completedUpdate')->name('completedUpdate');
Model::create is a simple wrapper around $model = new MyModel(); $model->save()
A raw DB::table query builder isn't an Eloquent model and thus doesn't have those automatic parameters.
An example of insert data in a DB like :
DB::table('users')->insert( ['email' => 'john#example.com', 'votes' => 0] );
Using get() returns a Collection. Despite the fact you are passing in a 'unique' ID, the id, it will still return a collection. The collection will simply have one element in it.
Subsequently, your code will not work as you have experienced, or at least not without a few changes to make $data reference the first element in the collection.
$data = DB::table('rdv')->get(); // <= error here
foreach($data as $rdv) {
if ( $rdv->Etat_de_rdv == 'en_attente' ) { // <= also an error
DB::table('rdv')->where('Etat_de_rdv','en_attente')->update(['Etat_de_rdv' => 'Accepter']);
}
}
$data->Etat_de_rdv = $request->changeStatus;
$data->save(); // <= there are no save method on query builder
Here is an example how the save() method works with Model :
$id = 1;
$data = Rdv::find($id);
$data->Etat_de_rdv = $request->changeStatus;
$data->save();

Route [aktivitas.destroy] not defined. (View: C:\xampp\htdocs\TA\resources\views\aktivitas\index.blade.php)

I Try Made Crud Can't defined aktivitas.destroy
index.blade.php
<div class="bs-bars pull-left">
<a href="{{ route('pegawai.create') }}"class="btn btn-primary btn-md">
Tambah
</a>
<a href="{{ url('pegawai-pdf') }}" class="btn btn-success btn-md">
<i class="fas fa-file-pdf"></i> Data Aktivitas
</a>
</div>
#foreach($ar_judul as $jdl)
<th>{{ $jdl }}</th>
#endforeach
</tr>
</thead>
<tbody>
#foreach ($ar_aktivitas as $akt)
<tr>
<td>{{ $no++ }}</td>
<td>{{ $akt->nama_jenis_anggaran }}</td>
<td>{{ $akt->jenis_anggaran }}</td>
<td>{{ $akt->unt }}</td>
<td>Rp. {{ number_format($akt->jumlah_anggaran,2,',','.') }}</td>
<td>{{ $akt->peg }}</td>
<td>{{ $akt->tgl_aktivitas }}</td>
<td>
#if(!empty($akt->foto))
<img src="{{asset('img')}}/{{ $akt->foto }}" width="70px" height="70px">
#else
<div class="icon text-black bg-violet">
<i class="fas fa-tired"></i>
</div>
#endif
</td>
<td>
<form method="POST" action="{{ route('aktivitas.destroy',$akt->id)}}">
<div class="icon">
<a href="{{ route('aktivitas.show',$akt->id) }}" >
<div class="icon bg-blue">
<i class="fas fa-eye"></i>
</div>
</a>
<a href="{{ route('aktivitas.edit',$akt->id) }}" class="">
<div class="icon bg-green">
<i class="fas fa-pen"></i>
</div>
</a>
#csrf
#method('DELETE')
<button type="submit"
class="btn-danger btn-circle btn-sm"
onclick="return confirm('Yakin diHapus?')">
<div class="icon bg-red">
<i class="fas circle fa-trash"></i>
</div>
</button>
AktivitasController.php Controller
class AktivitasController extends Controller
{
/**
* Display a listing of the resource.
*
* #return \Illuminate\Http\Response
*/
public function index()
{
$ar_aktivitas = DB::table('aktivitas')
->join('unit', 'unit.id', '=', 'aktivitas.unit_id')
->join('pegawai', 'pegawai.id', '=', 'aktivitas.pegawai_id')
->select('aktivitas.*', 'unit.nama AS unt', 'pegawai.nama AS peg')
->get();
return view('aktivitas.index', compact('ar_aktivitas'));
}
public function create()
{
//arahkan ke form input data baru
return view('aktivitas.form');
}
/**
* Store a newly created resource in storage.
*
* #param \Illuminate\Http\Request $request
* #return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//validasi data
$validator = Validator::make(request()->all(),[
'nama_jenis_anggaran'=>'required',
'jenis_anggaran'=>'required',
'unit_id'=>'required',
'jumlah_anggaran'=>'required',
'pegawai_id'=>'required',
'tgl_aktivitas'=>'required',
'keterangan'=>'image|mimes:jpg,jpeg,png,gif|max:2048',
],[
'nama_jenis_anggaran.required'=>'Nama Jenis Anggaran Wajib untuk diisi',
'jenis_anggaran.required'=>'Jenis Anggaran Wajib untuk dipilih',
'unit_id.required'=>'Unit Wajib untuk dipilih',
'jumlah_anggaran.required'=>'Jumlah Anggaran Wajib untuk dipilih',
'pegawai.required'=>'Pegawai Wajib untuk diisi',
'tgl_aktivitas.required'=>'Tanggal Wajib untuk diisi',
'keterangan.image'=>'Ektensi File Foto Hanya Boleh .jpg, .png, .gif',
'keterangan.max' =>'File Foto Melebihi 2048 KB',
])->validate();
//2. proses upload,dicek pas input ada upload file/tidak
if(!empty($request->foto)){
/*
$request->validate([
'foto' => 'image|mimes:jpg,jpeg,png,giff|max:2048',
]);
*/
//$fileName = $request->nip.'.'.$request->foto->extension();
$fileName = $request->nip.'.jpg';
$request->foto->move(public_path('img'), $fileName);
}else{
$fileName = '';
}
//1. tangkap request form
DB::table('aktivitas')->insert(
[
'pegawai_id'=>$request->pegawai_id,
'nama_jenis_anggaran'=>$request->nama_jenis_anggaran,
'jenis_anggaran'=>$request->jenis_anggaran,
'jumlah_anggaran'=>$request->jumlah_anggaran,
'tgl_aktivitas'=>$request->tgl_aktivitas,
'keterangan'=>$request->$fileName,
'unit_id'=>$request->unit_id,
]
);
//landing page
return redirect ('/aktivitas');
}
public function show($id)
{
$ar_aktivitas = DB::table('aktivitas')
->join('unit', 'unit.id', '=', 'aktivitas.unit_id')
->join('pegawai', 'pegawai.id', '=', 'aktivitas.pegawai_id')
->select('aktivitas.*', 'unit.nama AS unt', 'pegawai.nama AS peg')
->where('aktivitas.id','=',$id)
->get();
return view('aktivitas.index', compact('ar_aktivitas'));
}
public function edit($id)
{
//tampilkan form untuk menampilkan
//data lama yg mau diedit sebanyak 1 baris data
$data = DB::table('aktivitas')->where('id',$id)->get();
return view('aktivitas/form_edit',compact('data'));
}
/**
* Update the specified resource in storage.
*
* #param \Illuminate\Http\Request $request
* #param int $id
* #return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
//1.proses ubah data
DB::table('aktivitas')->where('id',$id)->update(
[
'pegawai_id'=>$request->pegawai_id,
'nama_jenis_anggaran'=>$request->nama_jenis_anggaran,
'jenis_anggaran'=>$request->jenis_anggaran,
'jumlah_anggaran'=>$request->jumlah_anggaran,
'tgl_aktivitas'=>$request->tgl_aktivitas,
'keterangan'=>$request->keterangan,
'unit_id'=>$request->unit_id,
]
);
//landing page ke detail pemasukan
return redirect ('/activity'.'/'.$id);
}
public function destroy($id)
{
//ambil isi kolom foto lalu hapus file fotonya
//di folder img
//$foto = DB::table('aktivitas')->select('keterangan')->where('id','=',$id)->get();
//foreach($foto as $f){
// $namaFile = $f->foto;
//}
//File::delete(public_path('img/'.$namaFile));
///hapus data
DB::table('aktivitas')->where('id',$id)->delete();
//landing page ke hal pegawai / index.blade.php
return redirect ('/activity');
}
}
You can add:
Route::delete('aktivitas','AktivitasController#destroy');
Add on your routes/web.php

Wrap Phalcon flash messages in HTML element

Is there a possibility to wrap flash messages in an element? I want to have no html element at all when there are no messages and have an extra div containing all messages if there is any message.
It would be enough if I could at least get information whether there are any flash messages and then code it myself, but it seems to me that neither Phalcon\Flash\Direct nor Phalcon\Flash\Session allow you to access current message count or wrap messages in your own html element.
Just configure your flash service to just output the message:
$this->flash->setAutomaticHtml(false);
Also, when outputting a message, it's automatically echoed.
If you want to just return a string without echoing it to the output buffer use:
$this->flash->setImplicitFlush(false);
These methods aren't in the main documentation page, but you should always look at the class reference too, you might find very usefull information there :)
EDIT
To return only messages you use setAutomaticHtml to false, setImplicitFlush has nothing to do with it. Also to know if a message exists use something like this:
$this->flashSession->has('error');
I have ended with following code. I basically had to generate output myself.
<?php
$messages = $this->flashSession->getMessages();
if ( count($messages) > 0) {
?>
<div class="basic-bg">
<div class="main-column">
<div class="flash-messages">
<?php
foreach ($messages as $messageType => $messageArray) {
foreach ($messageArray as $message) {
echo "<div class=\"flash-$messageType\">$message</div>";
}
}
?>
</div>
</div>
</div>
<?php } ?>
I know this is an old thread, but how about implementing an extended class to make sure your message string is still correctly escaped?
This is the class I've used to implement Bootstrap 3 dismissable messages:
<?php
namespace Ext;
/**
* Extension to Phalcon Framework to implement Bootstrap 3 dismissable messages.
* Pass mappings of phalcon to bootstrap classes to construct
* #link https://docs.phalconphp.com/uk/latest/reference/flash.html Phalcon flash docs
* #author Kevin Andrews <kevin#zvps.uk>
*/
class FlashBootstrap extends \Phalcon\Flash\Session
{
/**
* Correctly escapes the message while building a Bootstrap 3
* compatible dismissable message with surrounding html.
* #param string $type
* #param string $message
* #return void
*/
public function message($type, $message)
{
$bootstrapCssClass = $this->_cssClasses[$type];
$errorType = ucfirst($type);
$bootstrapMessage = "<div class=\"alert alert-{$bootstrapCssClass} alert-dismissible\" role=\"alert\"><button type=\"button\" class=\"close\" data-dismiss=\"alert\" aria-label=\"Close\"><span aria-hidden=\"true\">×</span></button><strong>{$errorType}:</strong> {$this->getEscaperService()->escapeHtml($message)}</div>";
parent::message($type, $bootstrapMessage);
}
}
Also for completeness the initialisation for DI:
<?php
$di->set('flash', function() {
$bootstrapFlash = new Ext\FlashBootstrap(array(
'error' => 'alert alert-danger alert-dismissible',
'success' => 'alert alert-success alert-dismissible',
'notice' => 'alert alert-info alert-dismissible',
'warning' => 'alert alert-dismissible',
));
$bootstrapFlash->setAutoescape(false);
$bootstrapFlash->setAutomaticHtml(false);
return $bootstrapFlash;
});
This also has the advantage that the ->success() ->error() ->notice() and ->warning() helper methods will all go through this code and produce nicely formatted messages wrapped in the desired HTML.
{% if flash.has('notice')==true OR flash.has('success') %}
{% for notif in flash.getMessages('success') %}
<div class="notif_global success">
<div class="notif_global-title">Успешно</div>
<div class="notif_global-content">{{ notif }}</div>
<div class="notif_global-close ico_close"></div>
</div>
{% endfor %}
{% for notif in flash.getMessages('notice') %}
<div class="notif_global success">
<div class="notif_global-title">Сообщение</div>
<div class="notif_global-content">{{ notif }}</div>
<div class="notif_global-close ico_close"></div>
</div>
{% endfor %}
{% endif %}
{% if flash.has('warning')==true OR flash.has('error') %}
{% for notif in flash.getMessages('warning') %}
<div class="notif_global error">
<div class="notif_global-title">Предупреждение</div>
<div class="notif_global-content">{{ notif }}</div>
<div class="notif_global-close ico_close"></div>
</div>
{% endfor %}
{% for notif in flash.getMessages('error') %}
<div class="notif_global error">
<div class="notif_global-title">Ошибка</div>
<div class="notif_global-content">{{ notif }}</div>
<div class="notif_global-close ico_close"></div>
</div>
{% endfor %}
{% endif %}