1. 程式人生 > >symfony框架入門之實戰手冊

symfony框架入門之實戰手冊

幾個常用的命令:

    啟動篇:app/console server:run -vvv

    路由篇:app/console route:debug   //檢視所有的路由

                  app/console route:match /page/index    //檢視的固定路由

   控制器: 拿到控制器的所以資料 ($this ->getRequest->引數);//[get,getMethod,cookie,create]等 isXmlRequest判斷是不是ajax請求  

                返回json格式的資料    return new JsonRequest(array('a'=1));//返回response物件

                返回response物件  return new Response('a');    

               重定向到某個頁面 return new RedirectResponse('www.baidu.com');

               

session :$this ->getRequest ->getSession ->set('a',1000);//設定session的值為1000;

                  $this ->getRequest ->getSession ->get('a',1000);//獲取session的值為1000;

                  $this ->getRequest ->getSession ->getFlasBag->add('a','b','c');//設定一次性的session;

                 註解:如果沒有拿到session,那就有可能是許可權問題,在app/cache/所以的快取沒有寫的許可權

service :  app/console container:debug//檢視所有symfony的服務

                 $doctrine = $this -> get('doctrine');//拿到服務

模板twig : app/console assets:install web --symlink --relative   //資源共享,軟連線(web目錄的資源和bundle裡的resource資源共享);

資料庫: Enttly                

資料庫連線配置修改在 app/config下面的parameters.yml.

如果沒有資料庫,可以用命令建立:app/console doctrine:database:create  //資料庫名稱,就是你配置裡的資料庫名稱

namespace Sourgen\WebBundle\Entity;

use Doctrine\ORM\Mappind as ORM;
/**
* @ORM\Entity(repositoryClass="UserRepository")
* @ORM\Table(name="user")
*/
class user{
      /**
      * @ORM\Id
      * @ORM\Column(type='integer')
      * @ORM\GeneratedValue(strategy="AUTH")
      */
      protected $id;

      /**
      * @ORM\Column(type="string")
      *
      *
      */
      protected $username;

}

接下來對user表的set,get檔案進行生成,

命令:app/console generate:doctrine:entities ScourgenWebBundle //自動生成user的get,set方法

          app/console doctrine:schema:update --force //後面的--force是強制執行

如果對錶進行了修改

          修改後執行 上面的兩個命令。    注意:類裡面的方法,並不會自動的給你刪除,需要對比後自己刪除

        也可以用     app/console doctrine:schema:update --dump-sql //檢視發生了哪些改變

表關聯  :於上面的使用者表關聯

namespace Sourgen\WebBundle\Entity;

use Doctrine\ORM\Mappind as ORM;
/**
* @ORM\Entity(repositoryClass="UserRepository")
* @ORM\Table(name="user")
*/
class profile{
      /**
      * @ORM\Id
      * @ORM\Column(type='integer')
      * @ORM\GeneratedValue(strategy="AUTH")
      */
      protected $id;

      /**
      * @ORM\Column(type='integer',nullable=true)
      *
      *
      */
      protected $mobile_num;

}

首先重複上面操作命令,建表。

需要定義兩個關聯欄位:

prifile表裡

/**
* @OneToOne(targetEntity="user",inversedBy="profile")
* @JoinColumn(name='user_id',referencedColumnName='id')
*
*/
private $user  //profile表裡定義

/**
* @OneToOne(targetEntity='profile',mappedBy="user")
*
*/
private $profile //定義在user裡

use Doctrine/ORM/Mapping/OneToOne //在profile
use Doctrine/ORM/Mapping/JoinColumn  //在profile裡

驗證定義的資料表是否正確:

        app/console doctrine:schema:validate  //動態驗證當前定義是否正確

 資料庫

     查詢:

          關聯查詢 

            $em = $this -> getDoctrine -> getManager();

          /**

         * @var $user \ScourgenWebBundle\Entity\User

         */

            $user = $e ->getRepository('ScourgenWebBunDle:User')->findOneBy(array('id'=>1));

           foreach($user ->getBooks as $book){ echo $book ->getTitle(); }

      

     新增:

        $em = $this -> getDoctrine -> getManager();

        $user = new User();

     // 一對多關係

     // $book= new Book;

    //$user = $e ->getRepository('ScourgenWebBunDle:User')->findOneBy(array('id'=>1));

    // $book ->addUser($user );

       $user ->setusername = '名字';

     

      $em ->persist($user);

      $em ->flush();