Vypadá to, že nastavujete polymorfní vztah, v takovém případě bych vše oddělil, což znamená, že byste měli model pro Cat, Dog, Turtle a PetData. Měli byste ovladače pro CatController, DogController a TurtleController. A měli byste formulář pro kočku, formulář pro psa a formulář pro želvu, přičemž každý z nich také obsahuje vstupy pro data, která požadujete pro tabulku pet_info.
Chcete-li vytvořit polymorfní vztah, bude vaše tabulka pet_data vyžadovat určité změny. Stačí změnit sloupec tabulky na pet_type
. Laravel očekává, že určitý název pro tento sloupec a jeho obsah bude spíše názvem modelu než názvem vaší tabulky.
Nastavení těchto modelů je velmi snadné, pro začátek udělám PetData a Pes.
class Dog extends Eloquent
{
protected $table = 'dogs_data';
protected $timestamps = false;
public function petData()
{
return $this->morphMany('PetData', 'pet');
}
}
class PetData extends Eloquent
{
protected $timestamps = false;
public function pet()
{
return $this->morphTo();
}
}
Více si o tom můžete přečíst zde... http://laravel.com/docs/eloquent# polymorfní vztahy
Myšlenka mít oddělené modely/ovladače pro všechno se může zdát jako hodně práce, ale při pokusech o údržbu nebo přidání dalších zvířat do vaší aplikace zabere dlouhou cestu, protože byste jen zřídka museli upravovat produkční kód, čímž se ztratí možnost zavádění dalších chyb při pokusu o přidání vylepšení na váš web.
Nyní je velmi snadné uložit data o mazlíčkovi a souvisejících mazlíčcích, aniž byste se museli starat o pet_id a pet_type v tabulce pet_data, Laravel se o to postará za vás. Funkce vašeho ovladače psa může vypadat takto...
class DogController extends BaseController
{
public function save()
{
$dog = new Dog;
$dog->name = Input::get('name');
$dog->age = Input::get('age');
$dog->save();
$pet_data = new PetData;
$pet_data->color = Input::get('color');
$dog->petData()->save($pet_data);
}
}
Pokud jde o vytvoření dalšího ovladače pro administrátory, řekl bych ano, udělejte to. Nikdy neuškodí ponechat části vašeho webu, které považujete za odlišné, v různých souborech. Pomáhá nejen s organizací, ale opět s oddělením starostí, o kterých byste si pravděpodobně měli přečíst více.
Existuje také několik fantastických možností třetích stran pro správu rolí. Použil jsem zizaco/entrust
dříve a zjistil, že je velmi snadné jej spravovat. Může vám to hodně usnadnit život, když se snažíte řídit, kdo co může ve vaší webové aplikaci dělat.