symfony PHPフレームワークpart2 (531レス)
1-

261
(3): nobodyさん [sage] 2010/11/15(月) 23:40:15 ID:??? AAS
これ、どうゆう意味ですか?

> 500 | Internal Server Error | Doctrine_Query_Exception
> The root class of the query (alias s) must have at least one field selected.

ユーザー毎の売上げを集計したいだけなんだけど。。。

#action.php
 public function executeSalelist(sfWebRequest $request)
 {
   $this->saless = Doctrine_Query::create()
   ->select('s.user_id as id, p.name, sum(s.amount) as amount')
   ->from('Sales s')
   ->leftJoin('s.Profile p')
   ->groupBy('id')
   ->execute();
 }
262: 261 [sage] 2010/11/15(月) 23:41:34 ID:??? AAS
#schema.yml
Sales:
 tableName: sales
 actAs:    { Timestampable: ~ }
 columns:
  user_id:
   type: integer
  amount: integer
 relations:
   User:
    class: sfGuardUser
    foreign: id
    local: user_id
    type: many
    onDelete: cascade
    foreignType: many
    foreignAlias: Sales
   Profile:
    class: sfGuardUserProfile
    foreign: user_id
    local: user_id
    type: many
    onDelete: cascade
    foreignType: many
    foreignAlias: Sales
263: nobodyさん [sage] 2010/11/16(火) 03:02:08 ID:??? AAS
sfGuardPluginついでに。

> $this->setWidget('user_id', new sfWidgetFormDoctrineChoice(array('model' => $this->getRelatedModelName('User'))));

フォームのプルダウンでuser_id=0のアカウントを選択してポストすると、
user_id=1として格納されてしまいます。
なんで〜??
264: nobodyさん [sage] 2010/11/16(火) 03:53:30 ID:??? AAS
user_idをauto_incrimentにしてない?
265: 261 [sage] 2010/11/16(火) 13:36:35 ID:??? AAS
selectからp.nameをとるととりあえずいける。
Profileがおかしいのかな?

Sales:
tableName: sales
actAs: { Timestampable: ~ }
columns:
user_id:
type: integer
amount: integer
relations:
User:
class: sfGuardUser
foreign: id
local: use_id
type: many
onDelete: cascade
foreignType: many
foreignAlias: Sales
Profile:
class: sfGuardUserProfile
foreign: user_id
local: user_id
type: many
onDelete: cascade
foreignType: many
foreignAlias: Profile
266: 261 [sage] 2010/11/16(火) 13:38:26 ID:??? AAS
sfGuardUserProfile:
tableName: sf_guard_user_profile
actAs: { Timestampable: ~ }
columns:
id: integer
user_id:
type: integer
primary: true
bank_name: varchar(50)
bank_point: varchar(50)
bank_type:
type: enum
values: [ordinary, current]
default: ordinary
name: varchar(50)
bank_number: varchar(50)
relations:
User:
class: sfGuardUser
foreign: id
local: user_id
type: one
onDelete: cascade
foreignType: one
foreignAlias: Profile
267
(4): nobodyさん [sage] 2010/11/16(火) 21:13:48 ID:??? AAS
フォーム難しいですね。。。

スキーマでは user_id(type:integer) にリレーションしてるんだけど、
フォームでは user_name(type:varchar(255)) で入力したい場合はどうすればいいですか?
268: 267 [sage] 2010/11/16(火) 21:27:44 ID:??? AAS
Newのときは下記コードでうまく「ユーザー名入力→ユーザーIDに変換」できるようになったんですが、
Editのとき編集フォームがuser_idのままです。。。

 public function configure()
 {
  $this->widgetSchema['user_id'] = new sfWidgetFormInputText();
  $this->setValidator('user_id', new sfValidatorString(array('max_length' => 128, 'required' => true)));
  $this->validatorSchema->setPostValidator(new sfValidatorCallback(
   array(
    'callback' => array($this, 'validateUsername'),
   ),
   array(
    'invalid' => 'アカウント名を正しく入力してください。',
   )
  ));

 }
269: 267 [sage] 2010/11/16(火) 21:31:08 ID:??? AAS
 public function validateUsername(sfValidatorBase $validator, $values)
 {
  if (strlen($values['user_id']))
  {
   $user = Doctrine_Core::getTable('User')->findOneByUsername($values['user_id']);

   if (!$user)
   {
    throw new sfValidatorError($validator, 'invalid');
   }

   $values['user_id'] = $user->getId();
  }

  return $values;
 }

}
270: 267 [sage] 2010/11/16(火) 22:50:03 ID:??? AAS
コンストラクタ上書きでできたけど、上記含めてお作法的にこれでいいんかな。。。
271: 267 [sage] 2010/11/16(火) 23:45:05 ID:??? AAS
このスレにはお世話になってるし、
だれかの役に立つかもしれないから、動いたコンストラクタのコードも一応書いときます。
けんちゃんより(はぁと)

 public function __construct($defaults = array(), $options = array(), $CSRFSecret = null)
 {
  if(isset($defaults['user_id']))
  {
   $user = Doctrine_Core::getTable('User')->find($defaults['user_id']);
   if($user)
   {
    $defaults['user_id'] = $user->getUsername();
   }
  }
  parent::__construct($defaults, $options, $CSRFSecret);
 }
272: nobodyさん [sage] 2010/11/17(水) 05:44:26 ID:??? AAS
他システムへのアクセスがあったときに、タスクを用いてSymfony側にアクセスログを取ろうとしています。

実行すると「There is no open connection」というエラーが出てしまいます。
なにがおかしいんでしょうか?

> $databaseManager = new sfDatabaseManager($this->configuration);
> $connection = $databaseManager->getDatabase('links')->getConnection();
を追加してみたのですが、
「 Database "links" does not exist.」
というエラーが出てしまいます。これは正しいDB名です。
273
(1): nobodyさん [sage] 2010/11/17(水) 05:46:56 ID:??? AAS
C:\MyProject\link>php symfony link:access user01 111.111.111.111

#accessTask.class.php
<?php

class accessTask extends sfBaseTask
{
 public function configure()
 {
  $this->namespace = 'link';
  $this->name   = 'access';
  $this->addArgument('username', sfCommandArgument::OPTIONAL);
  $this->addArgument('ip', sfCommandArgument::OPTIONAL);
 }

 public function execute($arguments = array(), $options = array())
 {

  $access = new Accesslog();
  $access->setUsername($arguments['username']);
  $access->setIp($arguments['ip']);
  $access->save();
  $this->log('access from '. $arguments['ip']);
 }
}
274: nobodyさん [sage] 2010/11/17(水) 10:31:09 ID:??? AAS
>>273
・extends sfDoctrineBaseTaskにする
・executeの冒頭に
$configuration = $this->createConfiguration('users', 'cli');
new sfDatabaseManager($this->configuration);
と書く。

理屈は知らんがw
doctrineならこれで動くんじゃね
275: nobodyさん [sage] 2010/11/17(水) 10:31:58 ID:??? AAS
あ、ごめん。createConfigurationの最初の引数はapp名で。
276: nobodyさん [sage] 2010/11/17(水) 17:22:41 ID:??? AAS
できた〜!

しっかし重いなぁ。。。
まだ連動させてないけど、Doctrineがログ吐くのが悪さしないといいんだけど。
(-quiet指定したら、"-u","-i","-e"オプションが無いとエラーが出たのであとで調べる。)
277: nobodyさん [sage] 2010/12/13(月) 19:58:07 ID:??? AAS
マイグレーションについてなんですけど、
カラムの追加は公式ドキュメントでなんとなく分かりました。

ただ、テーブル(既存テーブルとのリレーション有り)を新たに追加する場合は
どうすればよいのでしょうか?
Symfonyが吐いたテーブル作成のSQL文をコピペしてprod環境で実行、
モデル等のファイルをアップロード、
キャッシュクリア
というような手作業になるのでしょうか?
ビルドはいらないですよね?
278
(1): nobodyさん [sage] 2010/12/13(月) 22:35:02 ID:??? AAS
外部リンク[php]:localhost → 外部リンク:localhost
にするのはhttpd.cnfをいじるんかねえ?チラ)
279: nobodyさん [sage] 2010/12/13(月) 23:26:51 ID:??? AAS
まだあまりsymfonyを理解していないのですが、
symfony doctrine:build --all --and-load
すると、まずデータベースがdropされますよね?

複数プロジェクトで共通のユーザー情報マスタDBを使うつもりでいるので
1つのプロジェクトを更新するたびにユーザー情報がdropされると困るのですが、
どのように構成すればよいでしょうか?

#仮にユーザー情報マスタDBのスキーマだけを持ったプロジェクトを作って、
#ほかのプロジェクトはユーザー情報DBをスキーマに記述しない構成も考えたのですが、
#モデル等が作られないのでリレーション等が働かない気がしています。
280: nobodyさん [sage] 2010/12/14(火) 07:43:09 ID:??? AAS
>>278
外部リンク[html]:symfony-doc-ja.googlecode.com
281
(2): nobodyさん [sage] 2010/12/18(土) 02:06:30 ID:??? AAS
初心者のくせにサーバでsymfony運用始めちゃったんですけど、
新しいテーブル追加するにはどうすればいいですか??

サーバでbuild-allするとdropしちゃいますよね?
一旦save-fixtureすることも考えたんですが
sfGuardPluginなんで、パスワードが変わっちゃいますよね?;;
282: nobodyさん [sage] 2010/12/19(日) 00:28:41 ID:??? AAS
>>281
build-allじゃなくて必要なタスクだけ実行すればいいんじゃないの?

やり方は色々あると思うけど
例えば新しいテーブルはSQLで作って
symfony --xml build-schema
symfony build --model
symfony build --forms
symfony cc
とか。
283: 281 [] 2010/12/27(月) 05:22:49 ID:ZrwXahVr(1) AAS
遅くなりました。
ちょっとそれでやってみることにします。
284
(2): nobodyさん [sage] 2010/12/28(火) 01:53:08 ID:??? AAS
駄目フレームワークの典型symfony
だから誰も使わないし流行らない。
285
(1): nobodyさん [sage] 2010/12/28(火) 04:53:44 ID:??? AAS
2.0で大きく変わるんだから、自身で悪い点は分かってるんだろうよ。
フレームワークは所詮道具なんで、どれを使ってもいくつも使ってもいいと思う。
ケースバイケース、適材適所で。
1個覚えれば他に移行するのも楽だよ。
俺はsymfonyともPHPとも心中する気は無いけど、
それでも、今現在の最善策だと思って使ってく。
5年も経てば、CakeでもZendでもない新しいフレームワークにみんな移ってると思うよ。
そんな気持ち。
1-
あと 246 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.019s