PHPフレームワークSymfonyの学習帳
ユーザーが報告したバグか、ユーザーが担当者に任命されたバグの一覧表(ダッシュボード)を作成します。この一覧表はユーザー毎に作成する為、ユーザーの表示画面に追加します。ここでは再びDQLを使用します。今回は抽出条件を使用します。 UserController.phpのshowAction()を以下のように修正します。 ※サンプルをシンプルにする為、今回はページ制御を行いません。 // ... class UserController extends Controller { // ... public function showAction(User $user) { $deleteForm = $this->createDeleteForm($user); $dql = "SELECT b, e, r FROM AppBundle:Bug b " . "JOIN b.engineer e
# ... knp_paginator: template: # Bootstrap3用テンプレート pagination: KnpPaginatorBundle:Pagination:twitter_bootstrap_v3_pagination.html.twig indexAction()をDQLとKnpPaginatorBundleを使用するように修正します。 // ... use Doctrine\ORM\Query; use Knp\Bundle\PaginatorBundle\Pagination\SlidingPagination; // ... class BugController extends Controller { // ... public function indexAction(Request $request) { $dql = "SELECT b, e
メニューを以下のように修正します。 <nav class="navbar navbar-default"> <div class="container-fluid"> <!-- Brand and toggle get grouped for better mobile display --> <div class="navbar-header"> {# ... #} </div> <!-- Collect the nav links, forms, and other content for toggling --> <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"> <ul class="nav navbar-nav"> <li><a href="{{ path('product_index'
BugとUserエンティティを追加します。 <?php namespace AppBundle\Entity; use Doctrine\ORM\Mapping as ORM; /** * @ORM\Entity * @ORM\Table(name="bug") */ class Bug { /** * @ORM\Id * @ORM\Column(type="integer") * @ORM\GeneratedValue(strategy="AUTO") * @var int */ protected $id; /** * @ORM\Column(type="string") * @var string */ protected $description; /** * @ORM\Column(type="datetime") * @var \DateTime */ protected $c
以下の様に、Productエンティティを作成します。普通のPOPO(Plain Old PHP Object)としてクラスを定義します。 <?php namespace AppBundle\Entity; class Product { /** * @var int */ protected $id; /** * @var string */ protected $name; public function getId() { return $this->id; } public function getName() { return $this->name; } public function setName($name) { $this->name = $name; } } エンティティにはオブジェクトを一意に識別する為のidを持たせます。idは値を自動採番させる項目なので、Sette
このチュートリアルでは「Getting Started with Doctrine」をトレースしながら、Doctrineを学びます。 「Getting Started with Doctrine」では素のPHPにDoctrineをライブラリとして組み込み、コマンドラインのアプリケーションを作成して解説していますが、このチュートリアルではSymfonyのアプリケーションを作成しながら解説します。 ほぼ、オリジナルの「Getting Started with Doctrine」と同じ内容、同じ順番で進めますが、サンプルをSymfonyのアプリケーションにした為に必要となるコードは追記しています。オリジナルの「Getting Started with Doctrine」と完全に一致している訳ではありませんので、見比べる際にはご注意ください。 解説はDoctrineを中心に行い、Symfonyにつ
public/symfony_tutorial_todolist.txt · 最終更新: 2015/12/22 14:19 by tsubo
前回、ユーザーとタスクの間に1対多のリレーションを持たせました。これにより、タスク一覧画面にはログインしているユーザーが所有するタスクのみが表示されるようになりました。しかし、まだ問題があります。タスク編集用のURLで他のユーザが所有するタスクのIDを直接入力すると編集が出来てしまいます。 http://localhost:8000/task/{id}/edit 現在、{id}を変えれば、誰のタスクでも編集可能 この問題を解決する為に、タスクの編集処理と削除処理にユーザー承認(権限チェック)を追加します。 最初にコントローラー内に権限チェックのロジックをハードコーディングして承認してみます。 // ... use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException; // ... public function
Userエンティティを以下のように修正します。 // ... // 追加 use Doctrine\Common\Collections\ArrayCollection; use AppBundle\Entity\Task; // ... class User extends BaseUser { // ... // 追加 /** * @var Task[] * * @ORM\OneToMany(targetEntity="Task", mappedBy="owner") * @ORM\OrderBy({"name" = "ASC"}) */ private $tasks; public function __construct() { parent::__construct(); // 追加 $this->tasks = new ArrayCollection(); } // ... }
「超入門 Symfony3 : (13) Bundle」と同じ手順で、Userエンティティを追加し、FOSUserBundleのインストールと設定を行って下さい。 security.ymlの設定は以下になります。 security: # 認証方法 firewalls: dev: pattern: ^/(_(profiler|wdt)|css|images|js)/ security: false main: # フォームログイン form_login: provider: fos_userbundle csrf_token_generator: security.csrf.token_manager logout: true anonymous: ~ # アクセス制御 access_control: - { path: ^/task, role: ROLE_USER } # ユーザー情報取
次に、Taskの新規作成後と編集後のリダイレクト先を変更します。 // ... public function newAction(Request $request) { // ... if ($form->isSubmitted() && $form->isValid()) { // リダイレクト先を task_index に修正 // return $this->redirectToRoute('task_show', array('id' => $task->getId())); return $this->redirectToRoute('task_index'); } // ... } // ... public function editAction(Request $request, Task $task) { // ... if ($editForm->isSubmitte
Taskエンティティをジェネレータで作成します。項目はstring型のnameのみ作成します。 $ bin/console doctrine:generate:entity The Entity shortcut name: AppBundle:Task [Enter] Configuration format (yml, xml, php, or annotation) [annotation]: [Enter] New field name (press <return> to stop adding fields): name [Enter] Field type [string]: [Enter] Field length [255]: [Enter] Is nullable [false]: [Enter] Unique [false]: true [Enter] New fie
このチュートリアルではTODOリストの作成をテーマにSymfonyを学習します。 「超入門 Symfony3」を読み終えていることを前提としています。 このチュートリアルで学べること
public/learning_symfony.txt · 最終更新: 2016/01/07 18:23 by tsubo
ここでは、Symfonyのセキュリティ機能を学びます。 前半で、セキュリティ機能の概要や専門用語を説明し、後半で、おみくじサイトにセキュリティを実装します。 ここで説明するセキュリティの要件とは以下の内容になります。 特定のリソースに対するアクセスを、特定のユーザーにのみ提供する リソースとは、URL(領域)やModelオブジェクト、Methodの実行、Viewなどを指します。 特定のユーザーというのは「一般ユーザー」「管理者」といった、役割(Role)を持ったユーザの事を指します。 上記の要件を満たす為に、具体的に以下の事を行います。 ① 利用者にID/PWDでログインしてもらい、ユーザー情報を特定する。 ② ユーザー情報が持っている役割(Role)に基づいてリソースへのアクセス可否を判断する。 上記①②の事をSymfonyでは以下のように言います。
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く