在MVC框架中捕获异常的位置

Everyone talks about how important exception handling is. I have never had the need to handle them until recently:

try { 
    $pdo = new PDO($dns); 
} catch (Exception $e) {
    throw new Exception($e); 
} 

Another more general example would be:

if ($something) {
    throw new Exception('Ouch! I can't do that!');
}

After a little online research, I found that many examples/solutions online simply echo them. (PDO Exception Questions - How to Catch Them) Some don't have solutions. (Catching PDOException in lower layer and re-throwing as different exception to upper layer) & (Where to catch exception in PHP MVC application?) And others, I just dont understand. (Where to catch exceptions)

Question #1: Where should I catch exceptions; in the Model or Controller of a MVCish framework?

Question #2: What should catching it do? Log it, email it, display 503?

I am a .net guy and for me best practices for catching exceptions:

  • Catch it as late as possible.
  • Write a common code to catch exception.
  • Catch it at controller level and log it somewhere with complete stack trace (ETW, Log file, DB etc.).
  • Redirect user to some good looking error page. Only controller can do this.