1

(3 ответов, оставленных в Symfony 2.6–2.8)

Понятно. А как все таки обратиться тогда к id

$area = $this->getDoctrine()->getRepository('LostThingsAdminBundle:Area')->findAll();
$id = $area->getId();

так? Мне нужен id того что я достал из бызы.

2

(3 ответов, оставленных в Symfony 2.6–2.8)

Доброго всем времени суток. Подскажите, как обратиться к объекту. Наприме есть запрос в базу - назад приходит объект

$area = $this->getDoctrine()->getRepository('LostThingsAdminBundle:Area')->findAll();

Обратиться вот так $area[0]->id, не получается. При попытке посмотреть что приходит в объект, комп зависает.

Спасибо большое вы мне очень помогли. Все работает.

Доброго всем времени суток. Подскажите кто знает. Нужно сохранить комментарий к статье в базу. Таблицы articles и comments между собой связаны articles.id = comments.article_id. Метод который выводит комментарии и сохраняет комментарии представлен ниже.

public function showArticleAction(Request $request, $id){
        $article = $this->getDoctrine()->getRepository('NewsMainBundle:Articles')->find($id);
        $comments = new Comments();
        $all_comments = $this->getDoctrine()->getRepository('NewsMainBundle:Comments')->findBy(array('articleId' => $id));
        $comments_form = $this->createCommentsForm($comments);
        $comments_form->handleRequest($request);
        if($request->getMethod() == 'POST'){
            $em = $this->getDoctrine()->getManager();
            $user = $this->getUser();
            $comment = $comments_form['comments']->getData();
            $comments->setArticleId($id);
            $comments->setComments($comment);
            $comments->setUserName($user);
 
            $em->persist($comments);
            $em->flush();
            $referer = $request->headers->get('referer');
            return new RedirectResponse($referer);
        }
        return $this->render('NewsMainBundle:Default:show_article.html.twig', array(
            'article' => $article,
            'form' => $comments_form->createView(),
            'all_comments' => $all_comments,
        ));
    }

Трудностьт заключаеся в сохранении article_id  в таблицу comments. Пробовал убрать связи между таблицами, тогда все сохраняется без проблем. Проблема чисто техническая заключается в строчке

$comments->setArticleId($id);

id приходит, проверял. Не могу сообразить как сохранять связанные сущности.

Доброго всем времени суток. Подскажите пожалуйста, как узнать количество пользователе онлайн. Использую fos user bundle.

6

(5 ответов, оставленных в Symfony 2.6–2.8)

Спасибо разобрался. Не знаю в чем была проблема, просто удалил код и заново переписал вручную. Возможно где то была опечатки или невидимые символы. Спс.

7

(5 ответов, оставленных в Symfony 2.6–2.8)

То что оно мне пишет что я пытаюсь рендерить темплейт, которого нет это я понял. Вопрос почему оно его не видит он же есть и пути вроде правильно прописаны, я много раз перепроверял

8

(5 ответов, оставленных в Symfony 2.6–2.8)

Да я читал документацию, но у меня почему то не работает или скорее всего я не так делаю. Вот смотрите как я делаю.
В контроллере DefaultController в методе menu я запрашиваю все категории из базы и возвращаю их в шаблон category.html.twig.

<?php
 
namespace News\MainBundle\Controller;
 
use News\MainBundle\Entity\Category;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
 
 
class DefaultController extends Controller
{
    public function indexAction()
    {
        $articles = $this->getDoctrine()->getRepository('NewsMainBundle:Articles')->findAll();
        return $this->render('NewsMainBundle:Default:index.html.twig', array(
            'articles' => $articles,
        ));
    }
 
    public function menuAction(){
        $categories = $this->getDoctrine()->getRepository('NewsMainBundle:Category')->findAll();
        return $this->render('NewsMainBundle:Default:category:html.twig', array(
            'categories' => $categories,
        ));
    }
}

в шаблоне category.html.twig я вывожу все категории

{% for category in categories %}
    {{ category.category }}
{% endfor %}

затем в layout.html.twig я запрашиваю контроллер как написано в документации

<div id="sidebar">
    {{ render(controller(
        'NewsMainBundle:Default:menu'
    )) }}
</div>

на что мне выдает ошибку
An exception has been thrown during the rendering of a template ("Unable to find template "NewsMainBundle:Default:category:html.twig".") in NewsMainBundle::layout.html.twig at line 116.

ошибка указывает на строчку     
{{ render(controller(
        'NewsMainBundle:Default:menu'
    ) }}

Что я не так делаю и на каком этапе? Если можно поподробнее.

9

(5 ответов, оставленных в Symfony 2.6–2.8)

Доброго всем времени суток. Подскажите можно ли вывести категории из базы в layout. Т.е. есть как обычно base.html.twig

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8" />
        <title>{% block title %}{% endblock %}</title>
        <meta name="keywords" content="{% block keywords %}{% endblock %}">
        <meta name="description" content="{% block description %}{% endblock %}">
        {% block stylesheets %}
            <link rel="stylesheet" href="{{ asset('css/main.css') }}" type="text/css">
            <link rel="stylesheet" href="{{ asset('css/fotorama.css') }}" type="text/css">
        {% endblock %}
        {% block javascripts %}
            <script src="{{ asset('js/jquery-1.10.2.min.js') }}"></script>
            <script src="{{ asset('js/fotorama.js') }}"></script>
        {% endblock %}
    </head>
    <body>
    <div id="container">
        <div id="header">
            {% block header %}{% endblock %}
        </div>
        <div id="navigation">
            {% block navigation %}{% endblock %}
        </div>
        <div id="content">
            <div id="main">
                {% block slider %}{% endblock %}
                {% block main %}{% endblock %}
            </div>
            <div id="sidebar">
                {% block forms %}{% endblock %}
                {% block categories %}{% endblock %}
            </div>
            <div class="clear"></div>
        </div>
        <div id="footer">
            {% block footer %}{% endblock %}
        </div>
    </div>
    </body>
</html>

его наследует layout.html.twig

{% extends '::base.html.twig' %}
 
 
{% block header %}
    <h1><span id="logo_first_word">Resume</span> <span id="logo_second_word">Site</span></h1>
    <div id="banner">
        <img src="{{ asset('images/programming_banner.jpg') }}">
    </div>
    <div class="clear"></div>
{% endblock %}
 
{% block navigation %}
    <ul>
        <li><a href="#">ГЛАВНАЯ</a> </li>
        <li><a href="#">МУЗЫКА</a> </li>
        <li><a href="#">ФОРУМ</a> </li>
    </ul>
{% endblock %}
 
 
{% block slider %}
    <div id="image_on_main">
        <div class="fotorama" data-autoplay="true" data-nav="thumbs">
            <img src="{{ asset('images/1.jpg') }}">
            <img src="{{ asset('images/2.jpg') }}">
            <img src="{{ asset('images/3.jpg') }}">
            <img src="{{ asset('images/1.jpg') }}">
            <img src="{{ asset('images/2.jpg') }}">
            <img src="{{ asset('images/3.jpg') }}">
            <img src="{{ asset('images/1.jpg') }}">
            <img src="{{ asset('images/2.jpg') }}">
            <img src="{{ asset('images/3.jpg') }}">
            <img src="{{ asset('images/1.jpg') }}">
            <img src="{{ asset('images/2.jpg') }}">
            <img src="{{ asset('images/3.jpg') }}">
        </div>
    </div>
{% endblock %}
 
 
 
{% block categories %}
    <div id="categories">
        {#<div id="title_categories">CATEGORIES</div>#}
        {#<div id="body_categories">#}
            {#{% for category in categories %}#}
                {#<ul>#}
                    {#<li>{{ category.category }}</li>#}
                {#</ul>#}
            {#{% endfor %}#}
        {#</div>#}
        {% render 'News:MainBundle:Default:menu' %}
    </div>
{% endblock %}

далее layout наследует index.html.twig

в индекс я вывожу статьи. Как мне сделать так что бы в index.html.twig наследовавщий layout.html.twig выводились категории. Категории должны быть в layoute так как они неизменны и браться из базы. Можно ли так сделать? Надеюсь что я понятно объяснил что мне нужно.

10

(17 ответов, оставленных в Symfony 2.6–2.8)

Тестирую чере плагин https://chrome.google.com/webstore/deta … cm/related

11

(17 ответов, оставленных в Symfony 2.6–2.8)

Спасибо за помощь. Остался пследний штрих. Как мне послать ответ в виде xml. По документации вроде написано так  return $this->container->get('besimple.soap.response')->setReturnValue(sprintf($id)); но ничего не возвращается.

<?php
 
namespace Acme\DemoBundle\Controller;
 
use Acme\DemoBundle\Entity\Users;
use BeSimple\SoapBundle\ServiceDefinition\Annotation as Soap;
use Symfony\Component\DependencyInjection\ContainerAware;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;
use BeSimple\SoapBundle\Soap\SoapHeader;
 
class DemoController extends ContainerAware
{
    /**
     * @Soap\Method("hello")
     * @Soap\Param("name", phpType = "string")
     * @Soap\Result(phpType = "string")
     */

    public function helloAction($savestring)
    {
 
        $entity = new Users();
        $em = $this->container->get('doctrine')->getManager();
        $entity->setUserName($savestring);
        $em->persist($entity);
        $em->flush();
        $id = $entity->getId();
 
        return $this->container->get('besimple.soap.response')->setReturnValue(sprintf($id));
    }
}

12

(17 ответов, оставленных в Symfony 2.6–2.8)

Спасибо, так получилось, но только теперь неизвестный метод persist() )

13

(17 ответов, оставленных в Symfony 2.6–2.8)

Понимаю с трудом, но хочу разобраться ибо надо. Ссылки что выше я все читал и до поста на форуме, но не совсем понимал. Не судите строго, но $this->getManager() тоже неизвестный метод. Что то я совсем не понимаю как тогда сохранить в базу входящий параметр.

<?php
 
namespace Acme\DemoBundle\Controller;
 
use Acme\DemoBundle\Entity\Users;
use BeSimple\SoapBundle\ServiceDefinition\Annotation as Soap;
use Symfony\Component\DependencyInjection\ContainerAware;
 
class DemoController extends ContainerAware
{
    /**
     * @Soap\Method("hello")
     * @Soap\Param("name", phpType = "string")
     * @Soap\Result(phpType = "string")
     */

    public function helloAction($name)
    {
        $entity = new Users();
 
        $em = $this->getDoctrine()->getManager();
        $entity->setUserName($name);
        $em->persist($entity);
        $em->flush();
        return $this->container->get('besimple.soap.response')->setReturnValue($entity->getId());
    }
}

как сохранить параметр? в базу?

14

(17 ответов, оставленных в Symfony 2.6–2.8)

Вроде все стало работать. Вроде бы.... Подскажите последний раз как протестить я чего то не совсем понимаю как отправить запрос?
Код контроллера:

<?php
 
namespace Acme\DemoBundle\Controller;
 
use Acme\DemoBundle\Entity\Users;
use BeSimple\SoapBundle\ServiceDefinition\Annotation as Soap;
use Symfony\Component\DependencyInjection\ContainerAware;
 
class DemoController extends ContainerAware
{
    /**
     * @Soap\Method("hello")
     * @Soap\Param("name", phpType = "string")
     * @Soap\Result(phpType = "string")
     */

    public function helloAction($name)
    {
        $entity = new Users();
 
        $em = $this->getDoctrine()->getManager();
        $entity->setUserName($name);
        $id = $entity->getId();
        $em->persist($entity);
        $em->flush();
        return $this->container->get('besimple.soap.response')->setReturnValue(sprintf('Goodbye %s!', $name));
    }
}

каким образом отправить запрос который посылается в helloAction($name)?
soap.test/hello/name? так?
или как то по другому?
И еще вопрос как сохранить в базу и как извлечь id сохранненого поля? Глупый вопрос потому, что $em = $this->getDoctrine()->getManager(); Пишет что неизвестный метов getDoctrine();
Извиняюсь за глупые вопросы.

15

(17 ответов, оставленных в Symfony 2.6–2.8)

Помогите мне пожалуйста разобраться! Я наверное чего то не понимаю. Сделал все по документации как сдесь http://besim.pl/SoapBundle/soapserver/c … ation.html
добавил роутинг в файл app/config/routing.yml

acme_demo:
    resource: "@AcmeDemoBundle/Resources/config/routing.yml"
    prefix:   /
 
app:
    resource: "@AppBundle/Controller/"
    type:     annotation
 
_besimple_soap:
    resource: "@BeSimpleSoapBundle/Resources/config/routing/webservicecontroller.xml"
    prefix:   /ws

добавил сервис в файл app/config/config.yml

imports:
    - { resource: parameters.yml }
    - { resource: security.yml }
    - { resource: services.yml }
 
be_simple_soap:
    services:
        DemoApi:
            namespace:     http://soap.test/ws/DemoApi/1.0/
            binding:       rpc-literal
            resource:      "@AcmeDemoBundle/Controller/DemoController.php"
            resource_type: annotation
 
# Put parameters here that don't need to change on each machine where the app is deployed
# http://symfony.com/doc/current/best_practices/configuration.html#application-related-configuration
parameters:
    locale: en
 
framework:
    #esi:             ~
    #translator:      { fallbacks: ["%locale%"] }
    secret:          "%secret%"
    router:
        resource: "%kernel.root_dir%/config/routing.yml"
        strict_requirements: ~
    form:            ~
    csrf_protection: ~
    validation:      { enable_annotations: true }
    #serializer:      { enable_annotations: true }
    templating:
        engines: ['twig']
        #assets_version: SomeVersionScheme
    default_locale:  "%locale%"
    trusted_hosts:   ~
    trusted_proxies: ~
    session:
        # handler_id set to null will use default session handler from php.ini
        handler_id:  ~
    fragments:       ~
    http_method_override: true
 
# Twig Configuration
twig:
    debug:            "%kernel.debug%"
    strict_variables: "%kernel.debug%"
 
# Assetic Configuration
assetic:
    debug:          "%kernel.debug%"
    use_controller: false
    bundles:        [ ]
    #java: /usr/bin/java
    filters:
        cssrewrite: ~
        #closure:
        #    jar: "%kernel.root_dir%/Resources/java/compiler.jar"
        #yui_css:
        #    jar: "%kernel.root_dir%/Resources/java/yuicompressor-2.4.7.jar"
 
# Doctrine Configuration
doctrine:
    dbal:
        driver:   pdo_mysql
        host:     "%database_host%"
        port:     "%database_port%"
        dbname:   "%database_name%"
        user:     "%database_user%"
        password: "%database_password%"
        charset:  UTF8
        # if using pdo_sqlite as your database driver:
        #   1. add the path in parameters.yml
        #     e.g. database_path: "%kernel.root_dir%/data/data.db3"
        #   2. Uncomment database_path in parameters.yml.dist
        #   3. Uncomment next line:
        #     path:     "%database_path%"
 
    orm:
        auto_generate_proxy_classes: "%kernel.debug%"
        naming_strategy: doctrine.orm.naming_strategy.underscore
        auto_mapping: true
 
# Swiftmailer Configuration
swiftmailer:
    transport: "%mailer_transport%"
    host:      "%mailer_host%"
    username:  "%mailer_user%"
    password:  "%mailer_password%"
    spool:     { type: memory }

добавил аннотации в контроллер

<?php
 
namespace Acme\DemoBundle\Controller;
 
 
use BeSimple\SoapBundle\ServiceDefinition\Annotation as Soap;
use Symfony\Component\BrowserKit\Response;
use Symfony\Component\DependencyInjection\ContainerAware;
 
class DemoController extends ContainerAware
{
    /**
     * @Soap\Method("hello")
     * @Soap\Param("name", phpType = "string")
     * @Soap\Result(phpType = "string")
     */

    public function helloAction($name)
    {
        return sprintf('Hello %s!', $name);
    }
 
    /**
     * @Soap\Method("goodbye")
     * @Soap\Param("name", phpType = "string")
     * @Soap\Result(phpType = "string")
     */

    public function goodbyeAction($name)
    {
        return $this->container->get('besimple.soap.response')->setReturnValue(sprintf('Goodbye %s!', $name));
    }
}

теперь мне нужно принять строку текста, занести ее в базу и вернуть id этой сохраненной строки
Вопрос в том что я не понимаю где принмать строку? В контроллере? Откуда ее принимать? То есть я понимаю так. Нужно в фале AcmeDemoBundle/Resources/config/routing.yml прописать маршрут

acme_demo_homepage:
    path:     /hello/{name}
    defaults: { _controller: AcmeDemoBundle:Demo:index }

в адресной строке браузера прописать soap.test/hello/name, принять в контроллере. В контроллере занести в базу и вернуть return new Response($name);  Или я не так понимаю. Помогите пожалуйста разобраться, очень надо. Мне очень важно разобраться, а спросить к сожаление не у кого. Заранее спасибо.

16

(17 ответов, оставленных в Symfony 2.6–2.8)

По документации я делал, но не работает.

17

(17 ответов, оставленных в Symfony 2.6–2.8)

Может еще подскажите поподробнее как сделать?
Нужно написать вебсервис SOAP с одним методом, который принимает на вход строку текста и возвращает id (primary key) полученный при записи этой строки в базу данных. Сервис писать с использованием symfony2. На выбор 2 варианта: с ручной генерацией WSDL листа либо с автоматической на основе кода.

18

(17 ответов, оставленных в Symfony 2.6–2.8)

Спасибо! Вы всегда мне помогаете.

19

(17 ответов, оставленных в Symfony 2.6–2.8)

Подскажите какой лучше бандл установить для soap сервиса? Кто чем пользуется?

20

(6 ответов, оставленных в Symfony 2.6–2.8)

Спасибо! Все равно не получилось, но направление я понял буду разбираться.

21

(6 ответов, оставленных в Symfony 2.6–2.8)

Так через опции то и не получается вывести категории т.е. вот это не подходит

$builder->add('category', 'choice', array('required', true),
));

есть вот это сгенерированное symfony автоматически

<?php
 
namespace Music\AdminBundle\Form;
 
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
 
class AlbumsType extends AbstractType
{
    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('group_name')
            ->add('track_name')
            ->add('category')
        ;
    }

и если изменить опции в поле category то тогда не выводятся сами категории. Вопрос в том как задать опции, если можно на примере,
что бы категории брались из базы данных, выводились, поле было обязательным и по умолчанию ничего не было выбрано, пустая строка.

22

(6 ответов, оставленных в Symfony 2.6–2.8)

placeholder задавать где?

23

(6 ответов, оставленных в Symfony 2.6–2.8)

Доброго всем времени суток! Подскажите пожалуйста, сгенерировал CRUD на основе сущностей. В сущностях есть связанные поля ManyToOne - OneToMany. Symfony мне сгенерировал форму.

<?php
 
namespace Music\AdminBundle\Form;
 
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
 
class AlbumsType extends AbstractType
{
    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('group_name')
            ->add('track_name')
            ->add('category')
        ;
    }
 
    /**
     * @param OptionsResolverInterface $resolver
     */

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'Music\AdminBundle\Entity\Albums'
        ));
    }
 
    /**
     * @return string
     */

    public function getName()
    {
        return 'music_adminbundle_albums';
    }
}

поле category выводится как выпадющий список.
Проблема в том что не получается сделать это поле обязательным, но что бы по умолчанию в нем не было ничего выбрано, то есть пусто.
Если сделать через аннотации @Assert\NotBlank(), то он становится обязательным но по умолчанию выбран первый пункт в списке.
Сделать так:

$builder->add('category', 'choice', array('required', true),
));

соответственно не получается, нет пунктов категорий из базы.
Подскажите как можно это сделать.

24

(2 ответов, оставленных в Symfony 2.6–2.8)

Доброго всем времен суток. Подскажите пожалуйста как в контроллере указать путь к папке web. Я забираю  файл с temp  и перемещаю  его в папку web/files.

25

(4 ответов, оставленных в Symfony 2.3—2.5)

Спасибо разобрался. Я устанавливал symfony как написано в мануале: php app/console symfony.phar new my_project. По умолчанию файл composer.json пустой. При установке пакета composer стирает все чего нет в composer.json а он пустой. Теперь я установил версию standard-edition через composer и все заработало, файл composer.json наполнен всем необходимым и все устанавливается нор. Только не понятно почему так в мануале написано устанавливать. А как вы устанавливаете symfony?