Table of Contents
Preface
Chapter 1: Meet Yii
Chapter 2: Getting Started
Chapter 3: The TrackStar Application
Chapter 4: Iteration 1: Creating the Initial TrackStar Application
Chapter 5: Iteration 2: Project CRUD
Chapter 6: Iteration 3: Adding Tasks
Chapter 7: Iteration 4: User Management and Authentication
Chapter 8: Iteration 5: User Access Control
Chapter 9: Iteration 6: Adding User Comments
Chapter 10: Iteration 7: Adding an RSS Web Feed
Chapter 11: Iteration 8: Making it Pretty - Design, Layout, Themes, and Internationalization(i18n)
Chapter 12: Iteration 9: Modules - Adding Administration
Chapter 13: Iteration 10: Production Readiness
Index
- Chapter 1: Meet Yii
- Yii is easy
- Yii is efficient
- Yii is extensible
- MVC architecture
- The model
- The view
- The controller
- Stitching these together: Yii request routing
- Blog posting example
- Object-relational mapping and Active Record
- Active Record
- The view and controller
- Summary
- Chapter 2: Getting Started
- Installing Yii
- Installing a database
- Creating a new application
- Hello, World!
- Creating the controller
- One final step
- Reviewing our request routing
- Adding dynamic content
- Adding the date and time
- Adding the date and time, a better approach
- Moving the data creation to the controller
- Have you been paying attention?
- Linking pages together
- Linking to a new page
- Getting a little help from Yii CHtml
- Summary
- Installing Yii
- Chapter 3: The TrackStar Application
- Introducing TrackStar
- Creating user stories
- Users
- Projects
- Issues
- Navigation and page flow
- Defining a data scheme
- Defining our development methodology
- Automated software testing
- Unit and functional testing
- Benefits of testing
- Test-driven development
- Testing in Yii
- Unit tests
- Installing PHPUnit
- Functional tests
- Installing Selenium
- Running a quick example
- Hello TDD!
- Unit tests
- Summary
- Chapter 4: Iteration 1: Creating the Initial TrackStar Application
- Iteration planning
- Creating the new application
- Connecting to the database
- Testing the connection
- Yii and databases
- Adding a db connection as an application component
- Testing the connection
- Summary
- Chapter 5: Iteration 2: Project CRUD
- Iteration planning
- Running our test suite
- Creating the project table
- Naming conventions
- Creating the AR model class
- Configuring Gii
- Using Gii to create our Project AR class
- Testing out our newly generated code
- Creating the unit test file
- Testing create
- Testing read
- Testing update and delete
- Was all that testing really necessary?
- Enabling CRUD operations for users
- Creating CRUD scaffolding for projects
- Creating a new project
- Adding a required field to our form
- Reading the project
- Updating and deleting projects
- Managing projects in admin mode
- More on testing—fixtures
- Configuring the fixture manager
- Creating a fixture
- Configuring this fixture for use
- Specifying a test database
- Using fixtures
- Summary
- Iteration planning
- Chapter 6: Iteration 3: Adding Tasks
- Iteration planning
- Running the test suite
- Designing the schema
- Defining some relationships
- Building the database and the relationships
- Creating the Active Record model classes
- Creating the Issue model class
- Creating the User model class
- Creating the Issue CRUD operations
- Using the Issue CRUD operations
- Creating a new Issue
- Adding the types drop-down menu
- Getting the test in the "Red"
- Moving From "Red" To "Green"
- Moving Back To "Red"
- Getting back to "Green" once again
- Adding the issue type dropdown
- Adding the status drop-down menu: Do it yourself
- Fixing the owner and requester fields
- Enforcing a project context
- Implementing a filter
- Adding a filter
- Specifying the filtered actions
- Adding some filter logic
- Adding the project ID
- Altering the project details page
- Removing the project input form field
- Returning back to the owner and requester dropdowns
- Generating the data to populate the drop-down menu
- Adding User and ProjectUserAssignment fixtures
- Making one last change
- Finishing the rest of the CRUD
- Listing the issues
- Altering the ProjectController
- Altering the project view file
- Making some final tweaks
- Getting the status and type text to display
- Adding the text display to the form
- Changing the issue detail view
- Getting the owner and requester names to display
- Using relational AR
- Making some final navigation tweaks
- Summary
- Chapter 7: Iteration 4: User Management and Authentication
- Iteration planning
- Running the test suite
- Creating our User CRUD
- Updating our common audit history columns
- Adding a password confirmation field
- Adding password encryption
- Authenticating users using the database
- Introducing the Yii authentication model
- Changing the authenticate implementation
- Introducing the Yii authentication model
- Updating the user last login time
- Displaying the last login time on the home page
- Summary
- Chapter 8: Iteration 5: User Access Control
- Iteration planning
- Running our existing test suite
- accessControl filter
- Role-based access control
- Configuring the authorization manager
- Creating the RBAC database tables
- Creating the RBAC authorization hierarchy
- Writing a console application command
- Assigning users to roles
- Adding RBAC roles to projects
- Adding RBAC business rules
- Implementing the new Project AR methods
- Adding Users To Projects
- Altering the Project model class
- Adding the new form model class
- Adding the new action method to the project controller
- Adding the new view file to display the form
- Putting it all together
- Checking authorization level
- Summary
- Chapter 9: Iteration 6: Adding User Comments
- Iteration planning
- Creating the model
- Creating the Comment CRUD
- Altering the scaffolding to meet requirements
- Adding a comment
- Displaying the form
- Creating a recent comments widget
- Introducing CWidget
- More on relational AR queries in Yii
- Completing the test
- Creating the widget
- Introducing CWidget
- Summary
- Chapter 10: Iteration 7: Adding an RSS Web Feed
- Iteration planning
- A little background: Content Syndication, RSS, and Zend Framework
- Installing Zend Framework
- Using Zend_Feed
- Creating user friendly URLs
- Using the URL manager
- Configuring routing rules
- Removing the entry script from the URL
- Using the URL manager
- Adding the feed links
- Summary
- Chapter 11: Iteration 8: Making it Pretty - Design, Layout, Themes, and Internationalization(i18n)
- Iteration planning
- Designing with layouts
- Specifying a layout
- Applying and using a layout
- Deconstructing the main.php layout file
- Introducing the Blueprint CSS framework
- Understanding the Blueprint installation
- Setting the page title
- Defining a page header
- Displaying menu navigation items
- Creating a breadcrumb navigation
- Specifying the content being decorated by the layout
- Defining the footer
- Introducing the Blueprint CSS framework
- Nesting the layouts
- Creating themes
- Building themes in Yii
- Creating a Yii theme
- Configuring the application to use a theme
- Translating the site to other languages
- Defining locale and language
- Performing language translation
- Performing message translation
- Performing file translation
- Summary
- Chapter 12: Iteration 9: Modules - Adding Administration
- Iteration planning
- Modules
- Creating a module
- Using a module
- Theming a module
- Applying a theme
- Restricting admin access
- Adding a system-wide message
- Creating the database table
- Creating our model and CRUD scaffolding
- Adding a link to our new functionality
- Displaying the message to users
- Importing the new model class for application-wide access
- Selecting the most recently updated message
- Adding a little design tweak
- Summary
- Chapter 13: Iteration 10: Production Readiness
- Iteration planning
- Logging
- Message logging
- Categories and levels
- Adding a login message log
- Message routing
- Handling errors
- Displaying errors
- Caching
- Configuring for cache
- Using a file-based cache
- Cache dependencies
- Fragment caching
- Declaring fragment caching options
- Using fragment cache
- Page caching
- General performance tuning tips
- Using APC
- Disabling debug mode
- Using yiilite.php
- Using caching techniques
- Enabling schema caching
- Summary