Мне было поручено создать веб-приложение для управления сменами.
Я использовал OpenSkedge (веб-приложение с открытым исходным кодом).
Одна из моих задач состоит в том, чтобы у каждого пользователя был набор навыков.
Я добавил функцию, в которой вы добавляете эти Наборы навыков, и у меня есть другое представление, отображающее информацию для пользователя.
Контроллер пользователя:
/**
* Finds and displays a User entity.
*
* @param integer $id ID of user
*
* @return \Symfony\Component\HttpFoundation\Response
*/
public function viewAction($id)
{
$em = $this->getDoctrine()->getManager();
if (is_null($id)) {
$id = $this->getUser()->getId();
}
$entity = $em->getRepository('OpenSkedgeBundle:User')->find($id);
VarDumper::dump($entity);
if (!$entity instanceof User) {
throw $this->createNotFoundException('Unable to find User entity.');
}
$deleteForm = $this->createDeleteForm($id);
return $this->render('OpenSkedgeBundle:User:view.html.twig', array(
'entity' => $entity,
'skillset' => $entity->getSkillset(),
'delete_form' => $deleteForm->createView(),
));
}
SkillSet Entity:
<?php
// src/OpenSkedge/AppBundle/Entity/SkillSet.php
namespace OpenSkedge\AppBundle\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\KeyValueStore\Mapping\Annotations as KeyValue;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Component\Security\Core\User\AdvancedUserInterface;
use Symfony\Component\Security\Core\User\EquatableInterface;
use Symfony\Component\Validator\Constraints as Assert;
/**
* OpenSkedge\AppBundle\Entity\SkillSet
*
* @ORM\Table(name="os_skillset")
* @ORM\Entity
*/
class SkillSet
{
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\Column(type="string", length=100)
*/
private $skillSet;
/**
* @ORM\Column(type="string", length=100)
*/
private $skillNumber;
/**
* @ORM\ManyToOne(targetEntity="user", inversedBy="sset")
* @ORM\JoinColumn(name="id", referencedColumnName="id")
*/
private $user;
public function getSkillSet()
{
return $this->skillSet;
}
public function setSkillSet($s){
$this->skillSet = $s;
return $this;
}
public function getSkillnumber()
{
return $this->skillNumber;
}
public function setSkillnumber($nm){
$this->skillNumber = $nm;
return $this;
}
public function getUser(){
return $this->user;
}
public function setUser(\OpenSkedge\AppBundle\Entity\User $u = null){
$this->user = $u;
return $this;
}
}
Просмотр формы:
{% extends 'OpenSkedgeBundle:Dashboard:index.html.twig' %}
{% block title %}{{ app_brand_name() }} - {{ entity.name }}{% endblock %}
{% block modulecontent %}
<div class="span12">
<h3>{{ entity.name }}</h3>
{% if app.user.id == entity.id %}
<div class="btn-group header-control">
<a class="btn" href="{{ path('user_edit', { 'id': entity.id }) }}"><i class="icon-pencil"></i> Edit</a>
</div>
{% elseif is_granted('ROLE_ADMIN') %}
<form action="{{ path('user_delete', { 'id': entity.id }) }}" method="post">
<div class="btn-group header-control">
<a class="btn" href="{{ path('user_edit', { 'id': entity.id }) }}"><i class="icon-pencil"></i> Edit</a>
{% if app.user.id != entity.id and delete_form is defined %}
{{ form_widget(delete_form) }}
<button class="btn btn-danger" type="submit"><i class="icon-trash icon-white"></i> Delete</button>
{% endif %}
</div>
</form>
{% endif %}
<div class="btn-group header-control">
<a class="btn btn-info" href="{{ path('user_schedules', { 'id': entity.id }) }}">Schedules</a>
<a class="btn btn-info" href="{{ path('user_positions', { 'id': entity.id }) }}">Positions</a>
<a class="btn btn-info" href="{{ path('user_supervisors', { 'id': entity.id }) }}">Supervisors</a>
<a class="btn btn-info" href="{{ path('user_employees', { 'id': entity.id }) }}">Employees</a>
</div>
<table class="table table-condensed">
<tbody>
<tr>
<th>Username</th>
<td>{{ entity.username }}</td>
</tr>
<tr>
<th>Name</th>
<td>{{ entity.name }}</td>
</tr>
<tr>
<th>Role</th>
<td>{{ entity.group.name }}</td>
</tr>
{% if entity.workphone %}
<tr>
<th>Work Phone</th>
<td>{{ entity.workphone }}</td>
</tr>
{% endif %}
{% if entity.homephone %}
<tr>
<th>Home Phone</th>
<td>{{ entity.homephone }}</td>
</tr>
{% endif %}
{% if entity.location %}
<tr>
<th>Location</th>
<td>{{ entity.location }}</td>
</tr>
{% endif %}
<tr>
<th>Email</th>
<td>{{ entity.email }}</td>
</tr>
{% if entity.min %}
<tr>
<th>Minimum Hours</th>
<td>{{ entity.min }}</td>
</tr>
{% endif %}
{% if entity.max %}
<tr>
<th>Maximum Hours</th>
<td>{{ entity.max }}</td>
</tr>
{% endif %}
{% if entity.hours %}
<tr>
<th>Requested Hours</th>
<td>{{ entity.hours }}</td>
</tr>
{% endif %}
{% if entity.notes %}
<tr>
<th>Notes</th>
<td>{{ entity.notes }}</td>
</tr>
{% endif %}
{% if is_granted('ROLE_ADMIN') %}
{% if entity.supnotes %}
<tr>
<th>Supervisor Notes</th>
<td>{{ entity.supnotes }}</td>
</tr>
{% endif %}
{% endif %}
<tr>
<th>Color</th>
<td><span class="label" style="background-color: {{ entity.color }};">{{ entity.color }}</span></td>
</tr>
<tr>
<th>Active</th>
<td>{% if entity.isactive == 1 %}yes{% else %}no{% endif %}</td>
</tr>
</tbody>
</table>
<h3>Skillsets</h3>
<ul class="skillset">
{% for set in skillset %}
{% endfor %}
</ul>
</div>
{% endblock %}
Ниже показан дамп пользовательского объекта:
Как видите, у пользователя есть свойство set, которое включает в себя наборы навыков, добавленные в новой форме.
Однако следующее не отображает такие наборы навыков на странице:
<h3>Skillsets</h3>
<ul class="skillset">
{% for set in skillset %}
{% endfor %}
</ul>
Как я могу решить эту проблему?